{
  "id": "17cfda23bdde5037457562cce91f262c",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.8.14",
  "solcLongVersion": "0.8.14+commit.80d49f37",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/splits/interfaces/ISplitMain.sol": {
        "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.4;\n\nimport {ERC20} from '@rari-capital/solmate/src/tokens/ERC20.sol';\n\n/**\n * @title ISplitMain\n * @author 0xSplits <will@0xSplits.xyz>\n */\ninterface ISplitMain {\n    /**\n     * FUNCTIONS\n     */\n\n    function walletImplementation() external returns (address);\n\n    function createSplit(\n        address[] calldata accounts,\n        uint32[] calldata percentAllocations,\n        uint32 distributorFee,\n        address controller\n    ) external returns (address);\n\n    function predictImmutableSplitAddress(\n        address[] calldata accounts,\n        uint32[] calldata percentAllocations,\n        uint32 distributorFee\n    ) external view returns (address);\n\n    function updateSplit(\n        address split,\n        address[] calldata accounts,\n        uint32[] calldata percentAllocations,\n        uint32 distributorFee\n    ) external;\n\n    function transferControl(address split, address newController) external;\n\n    function cancelControlTransfer(address split) external;\n\n    function acceptControl(address split) external;\n\n    function makeSplitImmutable(address split) external;\n\n    function distributeETH(\n        address split,\n        address[] calldata accounts,\n        uint32[] calldata percentAllocations,\n        uint32 distributorFee,\n        address distributorAddress\n    ) external;\n\n    function updateAndDistributeETH(\n        address split,\n        address[] calldata accounts,\n        uint32[] calldata percentAllocations,\n        uint32 distributorFee,\n        address distributorAddress\n    ) external;\n\n    function distributeERC20(\n        address split,\n        ERC20 token,\n        address[] calldata accounts,\n        uint32[] calldata percentAllocations,\n        uint32 distributorFee,\n        address distributorAddress\n    ) external;\n\n    function updateAndDistributeERC20(\n        address split,\n        ERC20 token,\n        address[] calldata accounts,\n        uint32[] calldata percentAllocations,\n        uint32 distributorFee,\n        address distributorAddress\n    ) external;\n\n    function withdraw(\n        address account,\n        uint256 withdrawETH,\n        ERC20[] calldata tokens\n    ) external;\n\n    /**\n     * EVENTS\n     */\n\n    /** @notice emitted after each successful split creation\n     *  @param split Address of the created split\n     */\n    event CreateSplit(address indexed split);\n\n    /** @notice emitted after each successful split update\n     *  @param split Address of the updated split\n     */\n    event UpdateSplit(address indexed split);\n\n    /** @notice emitted after each initiated split control transfer\n     *  @param split Address of the split control transfer was initiated for\n     *  @param newPotentialController Address of the split's new potential controller\n     */\n    event InitiateControlTransfer(address indexed split, address indexed newPotentialController);\n\n    /** @notice emitted after each canceled split control transfer\n     *  @param split Address of the split control transfer was canceled for\n     */\n    event CancelControlTransfer(address indexed split);\n\n    /** @notice emitted after each successful split control transfer\n     *  @param split Address of the split control was transferred for\n     *  @param previousController Address of the split's previous controller\n     *  @param newController Address of the split's new controller\n     */\n    event ControlTransfer(address indexed split, address indexed previousController, address indexed newController);\n\n    /** @notice emitted after each successful ETH balance split\n     *  @param split Address of the split that distributed its balance\n     *  @param amount Amount of ETH distributed\n     *  @param distributorAddress Address to credit distributor fee to\n     */\n    event DistributeETH(address indexed split, uint256 amount, address indexed distributorAddress);\n\n    /** @notice emitted after each successful ERC20 balance split\n     *  @param split Address of the split that distributed its balance\n     *  @param token Address of ERC20 distributed\n     *  @param amount Amount of ERC20 distributed\n     *  @param distributorAddress Address to credit distributor fee to\n     */\n    event DistributeERC20(\n        address indexed split,\n        ERC20 indexed token,\n        uint256 amount,\n        address indexed distributorAddress\n    );\n\n    /** @notice emitted after each successful withdrawal\n     *  @param account Address that funds were withdrawn to\n     *  @param ethAmount Amount of ETH withdrawn\n     *  @param tokens Addresses of ERC20s withdrawn\n     *  @param tokenAmounts Amounts of corresponding ERC20s withdrawn\n     */\n    event Withdrawal(address indexed account, uint256 ethAmount, ERC20[] tokens, uint256[] tokenAmounts);\n}\n"
      },
      "@rari-capital/solmate/src/tokens/ERC20.sol": {
        "content": "// SPDX-License-Identifier: AGPL-3.0-only\npragma solidity >=0.8.0;\n\n/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.\n/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)\n/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)\n/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.\nabstract contract ERC20 {\n    /*//////////////////////////////////////////////////////////////\n                                 EVENTS\n    //////////////////////////////////////////////////////////////*/\n\n    event Transfer(address indexed from, address indexed to, uint256 amount);\n\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\n\n    /*//////////////////////////////////////////////////////////////\n                            METADATA STORAGE\n    //////////////////////////////////////////////////////////////*/\n\n    string public name;\n\n    string public symbol;\n\n    uint8 public immutable decimals;\n\n    /*//////////////////////////////////////////////////////////////\n                              ERC20 STORAGE\n    //////////////////////////////////////////////////////////////*/\n\n    uint256 public totalSupply;\n\n    mapping(address => uint256) public balanceOf;\n\n    mapping(address => mapping(address => uint256)) public allowance;\n\n    /*//////////////////////////////////////////////////////////////\n                            EIP-2612 STORAGE\n    //////////////////////////////////////////////////////////////*/\n\n    uint256 internal immutable INITIAL_CHAIN_ID;\n\n    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;\n\n    mapping(address => uint256) public nonces;\n\n    /*//////////////////////////////////////////////////////////////\n                               CONSTRUCTOR\n    //////////////////////////////////////////////////////////////*/\n\n    constructor(\n        string memory _name,\n        string memory _symbol,\n        uint8 _decimals\n    ) {\n        name = _name;\n        symbol = _symbol;\n        decimals = _decimals;\n\n        INITIAL_CHAIN_ID = block.chainid;\n        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                               ERC20 LOGIC\n    //////////////////////////////////////////////////////////////*/\n\n    function approve(address spender, uint256 amount) public virtual returns (bool) {\n        allowance[msg.sender][spender] = amount;\n\n        emit Approval(msg.sender, spender, amount);\n\n        return true;\n    }\n\n    function transfer(address to, uint256 amount) public virtual returns (bool) {\n        balanceOf[msg.sender] -= amount;\n\n        // Cannot overflow because the sum of all user\n        // balances can't exceed the max uint256 value.\n        unchecked {\n            balanceOf[to] += amount;\n        }\n\n        emit Transfer(msg.sender, to, amount);\n\n        return true;\n    }\n\n    function transferFrom(\n        address from,\n        address to,\n        uint256 amount\n    ) public virtual returns (bool) {\n        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.\n\n        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;\n\n        balanceOf[from] -= amount;\n\n        // Cannot overflow because the sum of all user\n        // balances can't exceed the max uint256 value.\n        unchecked {\n            balanceOf[to] += amount;\n        }\n\n        emit Transfer(from, to, amount);\n\n        return true;\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                             EIP-2612 LOGIC\n    //////////////////////////////////////////////////////////////*/\n\n    function permit(\n        address owner,\n        address spender,\n        uint256 value,\n        uint256 deadline,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) public virtual {\n        require(deadline >= block.timestamp, \"PERMIT_DEADLINE_EXPIRED\");\n\n        // Unchecked because the only math done is incrementing\n        // the owner's nonce which cannot realistically overflow.\n        unchecked {\n            address recoveredAddress = ecrecover(\n                keccak256(\n                    abi.encodePacked(\n                        \"\\x19\\x01\",\n                        DOMAIN_SEPARATOR(),\n                        keccak256(\n                            abi.encode(\n                                keccak256(\n                                    \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\"\n                                ),\n                                owner,\n                                spender,\n                                value,\n                                nonces[owner]++,\n                                deadline\n                            )\n                        )\n                    )\n                ),\n                v,\n                r,\n                s\n            );\n\n            require(recoveredAddress != address(0) && recoveredAddress == owner, \"INVALID_SIGNER\");\n\n            allowance[recoveredAddress][spender] = value;\n        }\n\n        emit Approval(owner, spender, value);\n    }\n\n    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\n        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();\n    }\n\n    function computeDomainSeparator() internal view virtual returns (bytes32) {\n        return\n            keccak256(\n                abi.encode(\n                    keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"),\n                    keccak256(bytes(name)),\n                    keccak256(\"1\"),\n                    block.chainid,\n                    address(this)\n                )\n            );\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                        INTERNAL MINT/BURN LOGIC\n    //////////////////////////////////////////////////////////////*/\n\n    function _mint(address to, uint256 amount) internal virtual {\n        totalSupply += amount;\n\n        // Cannot overflow because the sum of all user\n        // balances can't exceed the max uint256 value.\n        unchecked {\n            balanceOf[to] += amount;\n        }\n\n        emit Transfer(address(0), to, amount);\n    }\n\n    function _burn(address from, uint256 amount) internal virtual {\n        balanceOf[from] -= amount;\n\n        // Cannot underflow because a user's balance\n        // will never be larger than the total supply.\n        unchecked {\n            totalSupply -= amount;\n        }\n\n        emit Transfer(from, address(0), amount);\n    }\n}\n"
      },
      "contracts/splits/SplitWallet.sol": {
        "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.4;\n\nimport {ISplitMain} from './interfaces/ISplitMain.sol';\nimport {ERC20} from '@rari-capital/solmate/src/tokens/ERC20.sol';\nimport {SafeTransferLib} from '@rari-capital/solmate/src/utils/SafeTransferLib.sol';\n\n/**\n * ERRORS\n */\n\n/// @notice Unauthorized sender\nerror Unauthorized();\n\n/**\n * @title SplitWallet\n * @author 0xSplits <will@0xSplits.xyz>\n * @notice The implementation logic for `SplitProxy`.\n * @dev `SplitProxy` handles `receive()` itself to avoid the gas cost with `DELEGATECALL`.\n */\ncontract SplitWallet {\n    using SafeTransferLib for address;\n    using SafeTransferLib for ERC20;\n\n    /**\n     * EVENTS\n     */\n\n    /** @notice emitted after each successful ETH transfer to proxy\n     *  @param split Address of the split that received ETH\n     *  @param amount Amount of ETH received\n     */\n    event ReceiveETH(address indexed split, uint256 amount);\n\n    /**\n     * STORAGE\n     */\n\n    /**\n     * STORAGE - CONSTANTS & IMMUTABLES\n     */\n\n    /// @notice address of SplitMain for split distributions & EOA/SC withdrawals\n    ISplitMain public immutable splitMain;\n\n    /**\n     * MODIFIERS\n     */\n\n    /// @notice Reverts if the sender isn't SplitMain\n    modifier onlySplitMain() {\n        if (msg.sender != address(splitMain)) revert Unauthorized();\n        _;\n    }\n\n    /**\n     * CONSTRUCTOR\n     */\n\n    constructor() {\n        splitMain = ISplitMain(msg.sender);\n    }\n\n    /**\n     * FUNCTIONS - PUBLIC & EXTERNAL\n     */\n\n    /** @notice Sends amount `amount` of ETH in proxy to SplitMain\n     *  @dev payable reduces gas cost; no vulnerability to accidentally lock\n     *  ETH introduced since fn call is restricted to SplitMain\n     *  @param amount Amount to send\n     */\n    function sendETHToMain(uint256 amount) external payable onlySplitMain {\n        address(splitMain).safeTransferETH(amount);\n    }\n\n    /** @notice Sends amount `amount` of ERC20 `token` in proxy to SplitMain\n     *  @dev payable reduces gas cost; no vulnerability to accidentally lock\n     *  ETH introduced since fn call is restricted to SplitMain\n     *  @param token Token to send\n     *  @param amount Amount to send\n     */\n    function sendERC20ToMain(ERC20 token, uint256 amount) external payable onlySplitMain {\n        token.safeTransfer(address(splitMain), amount);\n    }\n}\n"
      },
      "@rari-capital/solmate/src/utils/SafeTransferLib.sol": {
        "content": "// SPDX-License-Identifier: AGPL-3.0-only\npragma solidity >=0.8.0;\n\nimport {ERC20} from \"../tokens/ERC20.sol\";\n\n/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.\n/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)\n/// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.\n/// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller.\nlibrary SafeTransferLib {\n    /*//////////////////////////////////////////////////////////////\n                             ETH OPERATIONS\n    //////////////////////////////////////////////////////////////*/\n\n    function safeTransferETH(address to, uint256 amount) internal {\n        bool success;\n\n        assembly {\n            // Transfer the ETH and store if it succeeded or not.\n            success := call(gas(), to, amount, 0, 0, 0, 0)\n        }\n\n        require(success, \"ETH_TRANSFER_FAILED\");\n    }\n\n    /*//////////////////////////////////////////////////////////////\n                            ERC20 OPERATIONS\n    //////////////////////////////////////////////////////////////*/\n\n    function safeTransferFrom(\n        ERC20 token,\n        address from,\n        address to,\n        uint256 amount\n    ) internal {\n        bool success;\n\n        assembly {\n            // Get a pointer to some free memory.\n            let freeMemoryPointer := mload(0x40)\n\n            // Write the abi-encoded calldata into memory, beginning with the function selector.\n            mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000)\n            mstore(add(freeMemoryPointer, 4), from) // Append the \"from\" argument.\n            mstore(add(freeMemoryPointer, 36), to) // Append the \"to\" argument.\n            mstore(add(freeMemoryPointer, 68), amount) // Append the \"amount\" argument.\n\n            success := and(\n                // Set success to whether the call reverted, if not we check it either\n                // returned exactly 1 (can't just be non-zero data), or had no return data.\n                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),\n                // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3.\n                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.\n                // Counterintuitively, this call must be positioned second to the or() call in the\n                // surrounding and() call or else returndatasize() will be zero during the computation.\n                call(gas(), token, 0, freeMemoryPointer, 100, 0, 32)\n            )\n        }\n\n        require(success, \"TRANSFER_FROM_FAILED\");\n    }\n\n    function safeTransfer(\n        ERC20 token,\n        address to,\n        uint256 amount\n    ) internal {\n        bool success;\n\n        assembly {\n            // Get a pointer to some free memory.\n            let freeMemoryPointer := mload(0x40)\n\n            // Write the abi-encoded calldata into memory, beginning with the function selector.\n            mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000)\n            mstore(add(freeMemoryPointer, 4), to) // Append the \"to\" argument.\n            mstore(add(freeMemoryPointer, 36), amount) // Append the \"amount\" argument.\n\n            success := and(\n                // Set success to whether the call reverted, if not we check it either\n                // returned exactly 1 (can't just be non-zero data), or had no return data.\n                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),\n                // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.\n                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.\n                // Counterintuitively, this call must be positioned second to the or() call in the\n                // surrounding and() call or else returndatasize() will be zero during the computation.\n                call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)\n            )\n        }\n\n        require(success, \"TRANSFER_FAILED\");\n    }\n\n    function safeApprove(\n        ERC20 token,\n        address to,\n        uint256 amount\n    ) internal {\n        bool success;\n\n        assembly {\n            // Get a pointer to some free memory.\n            let freeMemoryPointer := mload(0x40)\n\n            // Write the abi-encoded calldata into memory, beginning with the function selector.\n            mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000)\n            mstore(add(freeMemoryPointer, 4), to) // Append the \"to\" argument.\n            mstore(add(freeMemoryPointer, 36), amount) // Append the \"amount\" argument.\n\n            success := and(\n                // Set success to whether the call reverted, if not we check it either\n                // returned exactly 1 (can't just be non-zero data), or had no return data.\n                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),\n                // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.\n                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.\n                // Counterintuitively, this call must be positioned second to the or() call in the\n                // surrounding and() call or else returndatasize() will be zero during the computation.\n                call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)\n            )\n        }\n\n        require(success, \"APPROVE_FAILED\");\n    }\n}\n"
      },
      "contracts/splits/SplitMain.sol": {
        "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.4;\n\nimport {ISplitMain} from './interfaces/ISplitMain.sol';\nimport {SplitWallet} from './SplitWallet.sol';\nimport {Clones} from './libraries/Clones.sol';\nimport {ERC20} from '@rari-capital/solmate/src/tokens/ERC20.sol';\nimport {SafeTransferLib} from '@rari-capital/solmate/src/utils/SafeTransferLib.sol';\n\n/**\n\n                                             █████████\n                                          ███████████████                  █████████\n                                         █████████████████               █████████████                 ███████\n                                        ███████████████████             ███████████████               █████████\n                                        ███████████████████             ███████████████              ███████████\n                                        ███████████████████             ███████████████               █████████\n                                         █████████████████               █████████████                 ███████\n                                          ███████████████                  █████████\n                                             █████████\n\n                             ███████████\n                          █████████████████                 █████████\n                         ███████████████████             ███████████████                  █████████\n                        █████████████████████           █████████████████               █████████████                ███████\n                       ███████████████████████         ███████████████████             ███████████████              █████████\n                       ███████████████████████         ███████████████████             ███████████████             ███████████\n                       ███████████████████████         ███████████████████             ███████████████              █████████\n                        █████████████████████           █████████████████               █████████████                ███████\n                         ███████████████████              █████████████                   █████████\n                          █████████████████                 █████████\n                             ███████████\n\n           ███████████\n       ███████████████████                  ███████████\n     ███████████████████████              ███████████████                  █████████\n    █████████████████████████           ███████████████████             ███████████████               █████████\n   ███████████████████████████         █████████████████████           █████████████████            █████████████              ███████\n   ███████████████████████████        ███████████████████████         ███████████████████          ███████████████            █████████\n   ███████████████████████████        ███████████████████████         ███████████████████          ███████████████           ███████████\n   ███████████████████████████        ███████████████████████         ███████████████████          ███████████████            █████████\n   ███████████████████████████         █████████████████████           █████████████████            █████████████              ███████\n    █████████████████████████           ███████████████████              █████████████                █████████\n      █████████████████████               ███████████████                  █████████\n        █████████████████                   ███████████\n           ███████████\n\n                             ███████████\n                          █████████████████                 █████████\n                         ███████████████████             ███████████████                  █████████\n                        █████████████████████           █████████████████               █████████████                ███████\n                       ███████████████████████         ███████████████████             ███████████████              █████████\n                       ███████████████████████         ███████████████████             ███████████████             ███████████\n                       ███████████████████████         ███████████████████             ███████████████              █████████\n                        █████████████████████           █████████████████               █████████████                ███████\n                         ███████████████████              █████████████                   █████████\n                          █████████████████                 █████████\n                             ███████████\n\n                                             █████████\n                                          ███████████████                  █████████\n                                         █████████████████               █████████████                 ███████\n                                        ███████████████████             ███████████████               █████████\n                                        ███████████████████             ███████████████              ███████████\n                                        ███████████████████             ███████████████               █████████\n                                         █████████████████               █████████████                 ███████\n                                          ███████████████                  █████████\n                                             █████████\n\n */\n\n/**\n * ERRORS\n */\n\n/// @notice Unauthorized sender `sender`\n/// @param sender Transaction sender\nerror Unauthorized(address sender);\n/// @notice Invalid number of accounts `accountsLength`, must have at least 2\n/// @param accountsLength Length of accounts array\nerror InvalidSplit__TooFewAccounts(uint256 accountsLength);\n/// @notice Array lengths of accounts & percentAllocations don't match (`accountsLength` != `allocationsLength`)\n/// @param accountsLength Length of accounts array\n/// @param allocationsLength Length of percentAllocations array\nerror InvalidSplit__AccountsAndAllocationsMismatch(uint256 accountsLength, uint256 allocationsLength);\n/// @notice Invalid percentAllocations sum `allocationsSum` must equal `PERCENTAGE_SCALE`\n/// @param allocationsSum Sum of percentAllocations array\nerror InvalidSplit__InvalidAllocationsSum(uint32 allocationsSum);\n/// @notice Invalid accounts ordering at `index`\n/// @param index Index of out-of-order account\nerror InvalidSplit__AccountsOutOfOrder(uint256 index);\n/// @notice Invalid percentAllocation of zero at `index`\n/// @param index Index of zero percentAllocation\nerror InvalidSplit__AllocationMustBePositive(uint256 index);\n/// @notice Invalid distributorFee `distributorFee` cannot be greater than 10% (1e5)\n/// @param distributorFee Invalid distributorFee amount\nerror InvalidSplit__InvalidDistributorFee(uint32 distributorFee);\n/// @notice Invalid hash `hash` from split data (accounts, percentAllocations, distributorFee)\n/// @param hash Invalid hash\nerror InvalidSplit__InvalidHash(bytes32 hash);\n/// @notice Invalid new controlling address `newController` for mutable split\n/// @param newController Invalid new controller\nerror InvalidNewController(address newController);\n\n/**\n * @title SplitMain\n * @author 0xSplits <will@0xSplits.xyz>\n * @notice A composable and gas-efficient protocol for deploying splitter contracts.\n * @dev Split recipients, ownerships, and keeper fees are stored onchain as calldata & re-passed as args / validated\n * via hashing when needed. Each split gets its own address & proxy for maximum composability with other contracts onchain.\n * For these proxies, we extended EIP-1167 Minimal Proxy Contract to avoid `DELEGATECALL` inside `receive()` to accept\n * hard gas-capped `sends` & `transfers`.\n */\ncontract SplitMain is ISplitMain {\n    using SafeTransferLib for address;\n    using SafeTransferLib for ERC20;\n\n    /**\n     * STRUCTS\n     */\n\n    /// @notice holds Split metadata\n    struct Split {\n        bytes32 hash;\n        address controller;\n        address newPotentialController;\n    }\n\n    /**\n     * STORAGE\n     */\n\n    /**\n     * STORAGE - CONSTANTS & IMMUTABLES\n     */\n\n    /// @notice constant to scale uints into percentages (1e6 == 100%)\n    uint256 public constant PERCENTAGE_SCALE = 1e6;\n    /// @notice maximum distributor fee; 1e5 = 10% * PERCENTAGE_SCALE\n    uint256 internal constant MAX_DISTRIBUTOR_FEE = 1e5;\n    /// @notice address of wallet implementation for split proxies\n    address public immutable override walletImplementation;\n\n    /**\n     * STORAGE - VARIABLES - PRIVATE & INTERNAL\n     */\n\n    /// @notice mapping to account ETH balances\n    mapping(address => uint256) internal ethBalances;\n    /// @notice mapping to account ERC20 balances\n    mapping(ERC20 => mapping(address => uint256)) internal erc20Balances;\n    /// @notice mapping to Split metadata\n    mapping(address => Split) internal splits;\n\n    /**\n     * MODIFIERS\n     */\n\n    /** @notice Reverts if the sender doesn't own the split `split`\n     *  @param split Address to check for control\n     */\n    modifier onlySplitController(address split) {\n        if (msg.sender != splits[split].controller) revert Unauthorized(msg.sender);\n        _;\n    }\n\n    /** @notice Reverts if the sender isn't the new potential controller of split `split`\n     *  @param split Address to check for new potential control\n     */\n    modifier onlySplitNewPotentialController(address split) {\n        if (msg.sender != splits[split].newPotentialController) revert Unauthorized(msg.sender);\n        _;\n    }\n\n    /** @notice Reverts if the split with recipients represented by `accounts` and `percentAllocations` is malformed\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\n     *  @param percentAllocations Percent allocations associated with each address\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n     */\n    modifier validSplit(\n        address[] memory accounts,\n        uint32[] memory percentAllocations,\n        uint32 distributorFee\n    ) {\n        if (accounts.length < 2) revert InvalidSplit__TooFewAccounts(accounts.length);\n        if (accounts.length != percentAllocations.length)\n            revert InvalidSplit__AccountsAndAllocationsMismatch(accounts.length, percentAllocations.length);\n        // _getSum should overflow if any percentAllocation[i] < 0\n        if (_getSum(percentAllocations) != PERCENTAGE_SCALE)\n            revert InvalidSplit__InvalidAllocationsSum(_getSum(percentAllocations));\n        unchecked {\n            // overflow should be impossible in for-loop index\n            // cache accounts length to save gas\n            uint256 loopLength = accounts.length - 1;\n            for (uint256 i = 0; i < loopLength; ++i) {\n                // overflow should be impossible in array access math\n                if (accounts[i] >= accounts[i + 1]) revert InvalidSplit__AccountsOutOfOrder(i);\n                if (percentAllocations[i] == uint32(0)) revert InvalidSplit__AllocationMustBePositive(i);\n            }\n            // overflow should be impossible in array access math with validated equal array lengths\n            if (percentAllocations[loopLength] == uint32(0)) revert InvalidSplit__AllocationMustBePositive(loopLength);\n        }\n        if (distributorFee > MAX_DISTRIBUTOR_FEE) revert InvalidSplit__InvalidDistributorFee(distributorFee);\n        _;\n    }\n\n    /** @notice Reverts if `newController` is the zero address\n     *  @param newController Proposed new controlling address\n     */\n    modifier validNewController(address newController) {\n        if (newController == address(0)) revert InvalidNewController(newController);\n        _;\n    }\n\n    /**\n     * CONSTRUCTOR\n     */\n\n    constructor() {\n        walletImplementation = address(new SplitWallet());\n    }\n\n    /**\n     * FUNCTIONS\n     */\n\n    /**\n     * FUNCTIONS - PUBLIC & EXTERNAL\n     */\n\n    /** @notice Receive ETH\n     *  @dev Used by split proxies in `distributeETH` to transfer ETH to `SplitMain`\n     *  Funds sent outside of `distributeETH` will be unrecoverable\n     */\n    receive() external payable {}\n\n    /** @notice Creates a new split with recipients `accounts` with ownerships `percentAllocations`, a keeper fee for splitting of `distributorFee` and the controlling address `controller`\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\n     *  @param percentAllocations Percent allocations associated with each address\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n     *  @param controller Controlling address (0x0 if immutable)\n     *  @return split Address of newly created split\n     */\n    function createSplit(\n        address[] calldata accounts,\n        uint32[] calldata percentAllocations,\n        uint32 distributorFee,\n        address controller\n    ) external override validSplit(accounts, percentAllocations, distributorFee) returns (address split) {\n        bytes32 splitHash = _hashSplit(accounts, percentAllocations, distributorFee);\n        if (controller == address(0)) {\n            // create immutable split\n            split = Clones.cloneDeterministic(walletImplementation, splitHash);\n        } else {\n            // create mutable split\n            split = Clones.clone(walletImplementation);\n            splits[split].controller = controller;\n        }\n        // store split's hash in storage for future verification\n        splits[split].hash = splitHash;\n        emit CreateSplit(split);\n    }\n\n    /** @notice Predicts the address for an immutable split created with recipients `accounts` with ownerships `percentAllocations` and a keeper fee for splitting of `distributorFee`\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\n     *  @param percentAllocations Percent allocations associated with each address\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n     *  @return split Predicted address of such an immutable split\n     */\n    function predictImmutableSplitAddress(\n        address[] calldata accounts,\n        uint32[] calldata percentAllocations,\n        uint32 distributorFee\n    ) external view override validSplit(accounts, percentAllocations, distributorFee) returns (address split) {\n        bytes32 splitHash = _hashSplit(accounts, percentAllocations, distributorFee);\n        split = Clones.predictDeterministicAddress(walletImplementation, splitHash);\n    }\n\n    /** @notice Updates an existing split with recipients `accounts` with ownerships `percentAllocations` and a keeper fee for splitting of `distributorFee`\n     *  @param split Address of mutable split to update\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\n     *  @param percentAllocations Percent allocations associated with each address\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n     */\n    function updateSplit(\n        address split,\n        address[] calldata accounts,\n        uint32[] calldata percentAllocations,\n        uint32 distributorFee\n    ) external override onlySplitController(split) validSplit(accounts, percentAllocations, distributorFee) {\n        _updateSplit(split, accounts, percentAllocations, distributorFee);\n    }\n\n    /** @notice Begins transfer of the controlling address of mutable split `split` to `newController`\n     *  @dev Two-step control transfer inspired by [dharma](https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/helpers/TwoStepOwnable.sol)\n     *  @param split Address of mutable split to transfer control for\n     *  @param newController Address to begin transferring control to\n     */\n    function transferControl(address split, address newController)\n        external\n        override\n        onlySplitController(split)\n        validNewController(newController)\n    {\n        splits[split].newPotentialController = newController;\n        emit InitiateControlTransfer(split, newController);\n    }\n\n    /** @notice Cancels transfer of the controlling address of mutable split `split`\n     *  @param split Address of mutable split to cancel control transfer for\n     */\n    function cancelControlTransfer(address split) external override onlySplitController(split) {\n        delete splits[split].newPotentialController;\n        emit CancelControlTransfer(split);\n    }\n\n    /** @notice Accepts transfer of the controlling address of mutable split `split`\n     *  @param split Address of mutable split to accept control transfer for\n     */\n    function acceptControl(address split) external override onlySplitNewPotentialController(split) {\n        delete splits[split].newPotentialController;\n        emit ControlTransfer(split, splits[split].controller, msg.sender);\n        splits[split].controller = msg.sender;\n    }\n\n    /** @notice Turns mutable split `split` immutable\n     *  @param split Address of mutable split to turn immutable\n     */\n    function makeSplitImmutable(address split) external override onlySplitController(split) {\n        delete splits[split].newPotentialController;\n        emit ControlTransfer(split, splits[split].controller, address(0));\n        splits[split].controller = address(0);\n    }\n\n    /** @notice Distributes the ETH balance for split `split`\n     *  @dev `accounts`, `percentAllocations`, and `distributorFee` are verified by hashing\n     *  & comparing to the hash in storage associated with split `split`\n     *  @param split Address of split to distribute balance for\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\n     *  @param percentAllocations Percent allocations associated with each address\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n     *  @param distributorAddress Address to pay `distributorFee` to\n     */\n    function distributeETH(\n        address split,\n        address[] calldata accounts,\n        uint32[] calldata percentAllocations,\n        uint32 distributorFee,\n        address distributorAddress\n    ) external override validSplit(accounts, percentAllocations, distributorFee) {\n        // use internal fn instead of modifier to avoid stack depth compiler errors\n        _validSplitHash(split, accounts, percentAllocations, distributorFee);\n        _distributeETH(split, accounts, percentAllocations, distributorFee, distributorAddress);\n    }\n\n    /** @notice Updates & distributes the ETH balance for split `split`\n     *  @dev only callable by SplitController\n     *  @param split Address of split to distribute balance for\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\n     *  @param percentAllocations Percent allocations associated with each address\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n     *  @param distributorAddress Address to pay `distributorFee` to\n     */\n    function updateAndDistributeETH(\n        address split,\n        address[] calldata accounts,\n        uint32[] calldata percentAllocations,\n        uint32 distributorFee,\n        address distributorAddress\n    ) external override onlySplitController(split) validSplit(accounts, percentAllocations, distributorFee) {\n        _updateSplit(split, accounts, percentAllocations, distributorFee);\n        // know splitHash is valid immediately after updating; only accessible via controller\n        _distributeETH(split, accounts, percentAllocations, distributorFee, distributorAddress);\n    }\n\n    /** @notice Distributes the ERC20 `token` balance for split `split`\n     *  @dev `accounts`, `percentAllocations`, and `distributorFee` are verified by hashing\n     *  & comparing to the hash in storage associated with split `split`\n     *  @dev pernicious ERC20s may cause overflow in this function inside\n     *  _scaleAmountByPercentage, but results do not affect ETH & other ERC20 balances\n     *  @param split Address of split to distribute balance for\n     *  @param token Address of ERC20 to distribute balance for\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\n     *  @param percentAllocations Percent allocations associated with each address\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n     *  @param distributorAddress Address to pay `distributorFee` to\n     */\n    function distributeERC20(\n        address split,\n        ERC20 token,\n        address[] calldata accounts,\n        uint32[] calldata percentAllocations,\n        uint32 distributorFee,\n        address distributorAddress\n    ) external override validSplit(accounts, percentAllocations, distributorFee) {\n        // use internal fn instead of modifier to avoid stack depth compiler errors\n        _validSplitHash(split, accounts, percentAllocations, distributorFee);\n        _distributeERC20(split, token, accounts, percentAllocations, distributorFee, distributorAddress);\n    }\n\n    /** @notice Updates & distributes the ERC20 `token` balance for split `split`\n     *  @dev only callable by SplitController\n     *  @dev pernicious ERC20s may cause overflow in this function inside\n     *  _scaleAmountByPercentage, but results do not affect ETH & other ERC20 balances\n     *  @param split Address of split to distribute balance for\n     *  @param token Address of ERC20 to distribute balance for\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\n     *  @param percentAllocations Percent allocations associated with each address\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n     *  @param distributorAddress Address to pay `distributorFee` to\n     */\n    function updateAndDistributeERC20(\n        address split,\n        ERC20 token,\n        address[] calldata accounts,\n        uint32[] calldata percentAllocations,\n        uint32 distributorFee,\n        address distributorAddress\n    ) external override onlySplitController(split) validSplit(accounts, percentAllocations, distributorFee) {\n        _updateSplit(split, accounts, percentAllocations, distributorFee);\n        // know splitHash is valid immediately after updating; only accessible via controller\n        _distributeERC20(split, token, accounts, percentAllocations, distributorFee, distributorAddress);\n    }\n\n    /** @notice Withdraw ETH &/ ERC20 balances for account `account`\n     *  @param account Address to withdraw on behalf of\n     *  @param withdrawETH Withdraw all ETH if nonzero\n     *  @param tokens Addresses of ERC20s to withdraw\n     */\n    function withdraw(\n        address account,\n        uint256 withdrawETH,\n        ERC20[] calldata tokens\n    ) external override {\n        uint256[] memory tokenAmounts = new uint256[](tokens.length);\n        uint256 ethAmount;\n        if (withdrawETH != 0) {\n            ethAmount = _withdraw(account);\n        }\n        unchecked {\n            // overflow should be impossible in for-loop index\n            for (uint256 i = 0; i < tokens.length; ++i) {\n                // overflow should be impossible in array length math\n                tokenAmounts[i] = _withdrawERC20(account, tokens[i]);\n            }\n            emit Withdrawal(account, ethAmount, tokens, tokenAmounts);\n        }\n    }\n\n    /**\n     * FUNCTIONS - VIEWS\n     */\n\n    /** @notice Returns the current hash of split `split`\n     *  @param split Split to return hash for\n     *  @return Split's hash\n     */\n    function getHash(address split) external view returns (bytes32) {\n        return splits[split].hash;\n    }\n\n    /** @notice Returns the current controller of split `split`\n     *  @param split Split to return controller for\n     *  @return Split's controller\n     */\n    function getController(address split) external view returns (address) {\n        return splits[split].controller;\n    }\n\n    /** @notice Returns the current newPotentialController of split `split`\n     *  @param split Split to return newPotentialController for\n     *  @return Split's newPotentialController\n     */\n    function getNewPotentialController(address split) external view returns (address) {\n        return splits[split].newPotentialController;\n    }\n\n    /** @notice Returns the current ETH balance of account `account`\n     *  @param account Account to return ETH balance for\n     *  @return Account's balance of ETH\n     */\n    function getETHBalance(address account) external view returns (uint256) {\n        return ethBalances[account] + (splits[account].hash != 0 ? account.balance : 0);\n    }\n\n    /** @notice Returns the ERC20 balance of token `token` for account `account`\n     *  @param account Account to return ERC20 `token` balance for\n     *  @param token Token to return balance for\n     *  @return Account's balance of `token`\n     */\n    function getERC20Balance(address account, ERC20 token) external view returns (uint256) {\n        return erc20Balances[token][account] + (splits[account].hash != 0 ? token.balanceOf(account) : 0);\n    }\n\n    /**\n     * FUNCTIONS - PRIVATE & INTERNAL\n     */\n\n    /** @notice Sums array of uint32s\n     *  @param numbers Array of uint32s to sum\n     *  @return sum Sum of `numbers`.\n     */\n    function _getSum(uint32[] memory numbers) internal pure returns (uint32 sum) {\n        // overflow should be impossible in for-loop index\n        uint256 numbersLength = numbers.length;\n        for (uint256 i = 0; i < numbersLength; ) {\n            sum += numbers[i];\n            unchecked {\n                // overflow should be impossible in for-loop index\n                ++i;\n            }\n        }\n    }\n\n    /** @notice Hashes a split\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\n     *  @param percentAllocations Percent allocations associated with each address\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n     *  @return computedHash Hash of the split.\n     */\n    function _hashSplit(\n        address[] memory accounts,\n        uint32[] memory percentAllocations,\n        uint32 distributorFee\n    ) internal pure returns (bytes32) {\n        return keccak256(abi.encodePacked(accounts, percentAllocations, distributorFee));\n    }\n\n    /** @notice Updates an existing split with recipients `accounts` with ownerships `percentAllocations` and a keeper fee for splitting of `distributorFee`\n     *  @param split Address of mutable split to update\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\n     *  @param percentAllocations Percent allocations associated with each address\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n     */\n    function _updateSplit(\n        address split,\n        address[] calldata accounts,\n        uint32[] calldata percentAllocations,\n        uint32 distributorFee\n    ) internal {\n        bytes32 splitHash = _hashSplit(accounts, percentAllocations, distributorFee);\n        // store new hash in storage for future verification\n        splits[split].hash = splitHash;\n        emit UpdateSplit(split);\n    }\n\n    /** @notice Checks hash from `accounts`, `percentAllocations`, and `distributorFee` against the hash stored for `split`\n     *  @param split Address of hash to check\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\n     *  @param percentAllocations Percent allocations associated with each address\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n     */\n    function _validSplitHash(\n        address split,\n        address[] memory accounts,\n        uint32[] memory percentAllocations,\n        uint32 distributorFee\n    ) internal view {\n        bytes32 hash = _hashSplit(accounts, percentAllocations, distributorFee);\n        if (splits[split].hash != hash) revert InvalidSplit__InvalidHash(hash);\n    }\n\n    /** @notice Distributes the ETH balance for split `split`\n     *  @dev `accounts`, `percentAllocations`, and `distributorFee` must be verified before calling\n     *  @param split Address of split to distribute balance for\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\n     *  @param percentAllocations Percent allocations associated with each address\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n     *  @param distributorAddress Address to pay `distributorFee` to\n     */\n    function _distributeETH(\n        address split,\n        address[] memory accounts,\n        uint32[] memory percentAllocations,\n        uint32 distributorFee,\n        address distributorAddress\n    ) internal {\n        uint256 mainBalance = ethBalances[split];\n        uint256 proxyBalance = split.balance;\n        // if mainBalance is positive, leave 1 in SplitMain for gas efficiency\n        uint256 amountToSplit;\n        unchecked {\n            // underflow should be impossible\n            if (mainBalance > 0) mainBalance -= 1;\n            // overflow should be impossible\n            amountToSplit = mainBalance + proxyBalance;\n        }\n        if (mainBalance > 0) ethBalances[split] = 1;\n        // emit event with gross amountToSplit (before deducting distributorFee)\n        emit DistributeETH(split, amountToSplit, distributorAddress);\n        if (distributorFee != 0) {\n            // given `amountToSplit`, calculate keeper fee\n            uint256 distributorFeeAmount = _scaleAmountByPercentage(amountToSplit, distributorFee);\n            unchecked {\n                // credit keeper with fee\n                // overflow should be impossible with validated distributorFee\n                ethBalances[distributorAddress != address(0) ? distributorAddress : msg.sender] += distributorFeeAmount;\n                // given keeper fee, calculate how much to distribute to split recipients\n                // underflow should be impossible with validated distributorFee\n                amountToSplit -= distributorFeeAmount;\n            }\n        }\n        unchecked {\n            // distribute remaining balance\n            // overflow should be impossible in for-loop index\n            // cache accounts length to save gas\n            uint256 accountsLength = accounts.length;\n            for (uint256 i = 0; i < accountsLength; ++i) {\n                // overflow should be impossible with validated allocations\n                ethBalances[accounts[i]] += _scaleAmountByPercentage(amountToSplit, percentAllocations[i]);\n            }\n        }\n        // flush proxy ETH balance to SplitMain\n        // split proxy should be guaranteed to exist at this address after validating splitHash\n        // (attacker can't deploy own contract to address with high balance & empty sendETHToMain\n        // to drain ETH from SplitMain)\n        // could technically check if (change in proxy balance == change in SplitMain balance)\n        // before/after external call, but seems like extra gas for no practical benefit\n        if (proxyBalance > 0) SplitWallet(split).sendETHToMain(proxyBalance);\n    }\n\n    /** @notice Distributes the ERC20 `token` balance for split `split`\n     *  @dev `accounts`, `percentAllocations`, and `distributorFee` must be verified before calling\n     *  @dev pernicious ERC20s may cause overflow in this function inside\n     *  _scaleAmountByPercentage, but results do not affect ETH & other ERC20 balances\n     *  @param split Address of split to distribute balance for\n     *  @param token Address of ERC20 to distribute balance for\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\n     *  @param percentAllocations Percent allocations associated with each address\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n     *  @param distributorAddress Address to pay `distributorFee` to\n     */\n    function _distributeERC20(\n        address split,\n        ERC20 token,\n        address[] memory accounts,\n        uint32[] memory percentAllocations,\n        uint32 distributorFee,\n        address distributorAddress\n    ) internal {\n        uint256 amountToSplit;\n        uint256 mainBalance = erc20Balances[token][split];\n        uint256 proxyBalance = token.balanceOf(split);\n        unchecked {\n            // if mainBalance &/ proxyBalance are positive, leave 1 for gas efficiency\n            // underflow should be impossible\n            if (proxyBalance > 0) proxyBalance -= 1;\n            // underflow should be impossible\n            if (mainBalance > 0) {\n                mainBalance -= 1;\n            }\n            // overflow should be impossible\n            amountToSplit = mainBalance + proxyBalance;\n        }\n        if (mainBalance > 0) erc20Balances[token][split] = 1;\n        // emit event with gross amountToSplit (before deducting distributorFee)\n        emit DistributeERC20(split, token, amountToSplit, distributorAddress);\n        if (distributorFee != 0) {\n            // given `amountToSplit`, calculate keeper fee\n            uint256 distributorFeeAmount = _scaleAmountByPercentage(amountToSplit, distributorFee);\n            // overflow should be impossible with validated distributorFee\n            unchecked {\n                // credit keeper with fee\n                erc20Balances[token][\n                    distributorAddress != address(0) ? distributorAddress : msg.sender\n                ] += distributorFeeAmount;\n                // given keeper fee, calculate how much to distribute to split recipients\n                amountToSplit -= distributorFeeAmount;\n            }\n        }\n        // distribute remaining balance\n        // overflows should be impossible in for-loop with validated allocations\n        unchecked {\n            // cache accounts length to save gas\n            uint256 accountsLength = accounts.length;\n            for (uint256 i = 0; i < accountsLength; ++i) {\n                erc20Balances[token][accounts[i]] += _scaleAmountByPercentage(amountToSplit, percentAllocations[i]);\n            }\n        }\n        // split proxy should be guaranteed to exist at this address after validating splitHash\n        // (attacker can't deploy own contract to address with high ERC20 balance & empty\n        // sendERC20ToMain to drain ERC20 from SplitMain)\n        // doesn't support rebasing or fee-on-transfer tokens\n        // flush extra proxy ERC20 balance to SplitMain\n        if (proxyBalance > 0) SplitWallet(split).sendERC20ToMain(token, proxyBalance);\n    }\n\n    /** @notice Multiplies an amount by a scaled percentage\n     *  @param amount Amount to get `scaledPercentage` of\n     *  @param scaledPercent Percent scaled by PERCENTAGE_SCALE\n     *  @return scaledAmount Percent of `amount`.\n     */\n    function _scaleAmountByPercentage(uint256 amount, uint256 scaledPercent)\n        internal\n        pure\n        returns (uint256 scaledAmount)\n    {\n        // use assembly to bypass checking for overflow & division by 0\n        // scaledPercent has been validated to be < PERCENTAGE_SCALE)\n        // & PERCENTAGE_SCALE will never be 0\n        // pernicious ERC20s may cause overflow, but results do not affect ETH & other ERC20 balances\n        assembly {\n            /* eg (100 * 2*1e4) / (1e6) */\n            scaledAmount := div(mul(amount, scaledPercent), PERCENTAGE_SCALE)\n        }\n    }\n\n    /** @notice Withdraw ETH for account `account`\n     *  @param account Account to withdrawn ETH for\n     *  @return withdrawn Amount of ETH withdrawn\n     */\n    function _withdraw(address account) internal returns (uint256 withdrawn) {\n        // leave balance of 1 for gas efficiency\n        // underflow if ethBalance is 0\n        withdrawn = ethBalances[account] - 1;\n        ethBalances[account] = 1;\n        account.safeTransferETH(withdrawn);\n    }\n\n    /** @notice Withdraw ERC20 `token` for account `account`\n     *  @param account Account to withdrawn ERC20 `token` for\n     *  @return withdrawn Amount of ERC20 `token` withdrawn\n     */\n    function _withdrawERC20(address account, ERC20 token) internal returns (uint256 withdrawn) {\n        // leave balance of 1 for gas efficiency\n        // underflow if erc20Balance is 0\n        withdrawn = erc20Balances[token][account] - 1;\n        erc20Balances[token][account] = 1;\n        token.safeTransfer(account, withdrawn);\n    }\n}\n"
      },
      "contracts/splits/libraries/Clones.sol": {
        "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.4;\n\n/// @notice create opcode failed\nerror CreateError();\n/// @notice create2 opcode failed\nerror Create2Error();\n\nlibrary Clones {\n    /**\n     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`\n     * except when someone calls `receive()` and then it emits an event matching\n     * `SplitWallet.ReceiveETH(indexed address, amount)`\n     * Inspired by OZ & 0age's minimal clone implementations based on eip 1167 found at\n     * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.0/contracts/proxy/Clones.sol\n     * and https://medium.com/coinmonks/the-more-minimal-proxy-5756ae08ee48\n     *\n     * This function uses the create2 opcode and a `salt` to deterministically deploy\n     * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n     * the clones cannot be deployed twice at the same address.\n     *\n     * init: 0x3d605d80600a3d3981f3\n     * 3d   returndatasize  0\n     * 605d push1 0x5d      0x5d 0\n     * 80   dup1            0x5d 0x5d 0\n     * 600a push1 0x0a      0x0a 0x5d 0x5d 0\n     * 3d   returndatasize  0 0x0a 0x5d 0x5d 0\n     * 39   codecopy        0x5d 0                      destOffset offset length     memory[destOffset:destOffset+length] = address(this).code[offset:offset+length]       copy executing contracts bytecode\n     * 81   dup2            0 0x5d 0\n     * f3   return          0                           offset length                return memory[offset:offset+length]                                                   returns from this contract call\n     *\n     * contract: 0x36603057343d52307f830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b160203da23d3df35b3d3d3d3d363d3d37363d73bebebebebebebebebebebebebebebebebebebebe5af43d3d93803e605b57fd5bf3\n     *     0x000     36       calldatasize      cds\n     *     0x001     6030     push1 0x30        0x30 cds\n     * ,=< 0x003     57       jumpi\n     * |   0x004     34       callvalue         cv\n     * |   0x005     3d       returndatasize    0 cv\n     * |   0x006     52       mstore\n     * |   0x007     30       address           addr\n     * |   0x008     7f830d.. push32 0x830d..   id addr\n     * |   0x029     6020     push1 0x20        0x20 id addr\n     * |   0x02b     3d       returndatasize    0 0x20 id addr\n     * |   0x02c     a2       log2\n     * |   0x02d     3d       returndatasize    0\n     * |   0x02e     3d       returndatasize    0 0\n     * |   0x02f     f3       return\n     * `-> 0x030     5b       jumpdest\n     *     0x031     3d       returndatasize    0\n     *     0x032     3d       returndatasize    0 0\n     *     0x033     3d       returndatasize    0 0 0\n     *     0x034     3d       returndatasize    0 0 0 0\n     *     0x035     36       calldatasize      cds 0 0 0 0\n     *     0x036     3d       returndatasize    0 cds 0 0 0 0\n     *     0x037     3d       returndatasize    0 0 cds 0 0 0 0\n     *     0x038     37       calldatacopy      0 0 0 0\n     *     0x039     36       calldatasize      cds 0 0 0 0\n     *     0x03a     3d       returndatasize    0 cds 0 0 0 0\n     *     0x03b     73bebe.. push20 0xbebe..   0xbebe 0 cds 0 0 0 0\n     *     0x050     5a       gas               gas 0xbebe 0 cds 0 0 0 0\n     *     0x051     f4       delegatecall      suc 0 0\n     *     0x052     3d       returndatasize    rds suc 0 0\n     *     0x053     3d       returndatasize    rds rds suc 0 0\n     *     0x054     93       swap4             0 rds suc 0 rds\n     *     0x055     80       dup1              0 0 rds suc 0 rds\n     *     0x056     3e       returndatacopy    suc 0 rds\n     *     0x057     605b     push1 0x5b        0x5b suc 0 rds\n     * ,=< 0x059     57       jumpi             0 rds\n     * |   0x05a     fd       revert\n     * `-> 0x05b     5b       jumpdest          0 rds\n     *     0x05c     f3       return\n     *\n     */\n    function clone(address implementation) internal returns (address instance) {\n        assembly {\n            let ptr := mload(0x40)\n            mstore(ptr, 0x3d605d80600a3d3981f336603057343d52307f00000000000000000000000000)\n            mstore(add(ptr, 0x13), 0x830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b1)\n            mstore(add(ptr, 0x33), 0x60203da23d3df35b3d3d3d3d363d3d37363d7300000000000000000000000000)\n            mstore(add(ptr, 0x46), shl(0x60, implementation))\n            mstore(add(ptr, 0x5a), 0x5af43d3d93803e605b57fd5bf300000000000000000000000000000000000000)\n            instance := create(0, ptr, 0x67)\n        }\n        if (instance == address(0)) revert CreateError();\n    }\n\n    function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n        assembly {\n            let ptr := mload(0x40)\n            mstore(ptr, 0x3d605d80600a3d3981f336603057343d52307f00000000000000000000000000)\n            mstore(add(ptr, 0x13), 0x830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b1)\n            mstore(add(ptr, 0x33), 0x60203da23d3df35b3d3d3d3d363d3d37363d7300000000000000000000000000)\n            mstore(add(ptr, 0x46), shl(0x60, implementation))\n            mstore(add(ptr, 0x5a), 0x5af43d3d93803e605b57fd5bf300000000000000000000000000000000000000)\n            instance := create2(0, ptr, 0x67, salt)\n        }\n        if (instance == address(0)) revert Create2Error();\n    }\n\n    /**\n     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n     */\n    function predictDeterministicAddress(\n        address implementation,\n        bytes32 salt,\n        address deployer\n    ) internal pure returns (address predicted) {\n        assembly {\n            let ptr := mload(0x40)\n            mstore(ptr, 0x3d605d80600a3d3981f336603057343d52307f00000000000000000000000000)\n            mstore(add(ptr, 0x13), 0x830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b1)\n            mstore(add(ptr, 0x33), 0x60203da23d3df35b3d3d3d3d363d3d37363d7300000000000000000000000000)\n            mstore(add(ptr, 0x46), shl(0x60, implementation))\n            mstore(add(ptr, 0x5a), 0x5af43d3d93803e605b57fd5bf3ff000000000000000000000000000000000000)\n            mstore(add(ptr, 0x68), shl(0x60, deployer))\n            mstore(add(ptr, 0x7c), salt)\n            mstore(add(ptr, 0x9c), keccak256(ptr, 0x67))\n            predicted := keccak256(add(ptr, 0x67), 0x55)\n        }\n    }\n\n    /**\n     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n     */\n    function predictDeterministicAddress(address implementation, bytes32 salt)\n        internal\n        view\n        returns (address predicted)\n    {\n        return predictDeterministicAddress(implementation, salt, address(this));\n    }\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers",
            "metadata",
            "storageLayout",
            "devdoc",
            "userdoc",
            "evm.gasEstimates"
          ],
          "": [
            "ast"
          ]
        }
      },
      "metadata": {
        "useLiteralContent": true
      }
    }
  },
  "output": {
    "contracts": {
      "@rari-capital/solmate/src/tokens/ERC20.sol": {
        "ERC20": {
          "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": "amount",
                  "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": "amount",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "DOMAIN_SEPARATOR",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "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": "",
                  "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": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "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": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "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": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)",
            "details": "Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "DOMAIN_SEPARATOR()": "3644e515",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "decimals()": "313ce567",
              "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.8.14+commit.80d49f37\"},\"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\":\"amount\",\"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\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"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\":\"\",\"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\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"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\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)\",\"details\":\"Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Modern and gas efficient ERC20 + EIP-2612 implementation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rari-capital/solmate/src/tokens/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@rari-capital/solmate/src/tokens/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.8.0;\\n\\n/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.\\n/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)\\n/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)\\n/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.\\nabstract contract ERC20 {\\n    /*//////////////////////////////////////////////////////////////\\n                                 EVENTS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            METADATA STORAGE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    string public name;\\n\\n    string public symbol;\\n\\n    uint8 public immutable decimals;\\n\\n    /*//////////////////////////////////////////////////////////////\\n                              ERC20 STORAGE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    uint256 public totalSupply;\\n\\n    mapping(address => uint256) public balanceOf;\\n\\n    mapping(address => mapping(address => uint256)) public allowance;\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            EIP-2612 STORAGE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    uint256 internal immutable INITIAL_CHAIN_ID;\\n\\n    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;\\n\\n    mapping(address => uint256) public nonces;\\n\\n    /*//////////////////////////////////////////////////////////////\\n                               CONSTRUCTOR\\n    //////////////////////////////////////////////////////////////*/\\n\\n    constructor(\\n        string memory _name,\\n        string memory _symbol,\\n        uint8 _decimals\\n    ) {\\n        name = _name;\\n        symbol = _symbol;\\n        decimals = _decimals;\\n\\n        INITIAL_CHAIN_ID = block.chainid;\\n        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                               ERC20 LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function approve(address spender, uint256 amount) public virtual returns (bool) {\\n        allowance[msg.sender][spender] = amount;\\n\\n        emit Approval(msg.sender, spender, amount);\\n\\n        return true;\\n    }\\n\\n    function transfer(address to, uint256 amount) public virtual returns (bool) {\\n        balanceOf[msg.sender] -= amount;\\n\\n        // Cannot overflow because the sum of all user\\n        // balances can't exceed the max uint256 value.\\n        unchecked {\\n            balanceOf[to] += amount;\\n        }\\n\\n        emit Transfer(msg.sender, to, amount);\\n\\n        return true;\\n    }\\n\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual returns (bool) {\\n        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.\\n\\n        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;\\n\\n        balanceOf[from] -= amount;\\n\\n        // Cannot overflow because the sum of all user\\n        // balances can't exceed the max uint256 value.\\n        unchecked {\\n            balanceOf[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        return true;\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                             EIP-2612 LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) public virtual {\\n        require(deadline >= block.timestamp, \\\"PERMIT_DEADLINE_EXPIRED\\\");\\n\\n        // Unchecked because the only math done is incrementing\\n        // the owner's nonce which cannot realistically overflow.\\n        unchecked {\\n            address recoveredAddress = ecrecover(\\n                keccak256(\\n                    abi.encodePacked(\\n                        \\\"\\\\x19\\\\x01\\\",\\n                        DOMAIN_SEPARATOR(),\\n                        keccak256(\\n                            abi.encode(\\n                                keccak256(\\n                                    \\\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\\\"\\n                                ),\\n                                owner,\\n                                spender,\\n                                value,\\n                                nonces[owner]++,\\n                                deadline\\n                            )\\n                        )\\n                    )\\n                ),\\n                v,\\n                r,\\n                s\\n            );\\n\\n            require(recoveredAddress != address(0) && recoveredAddress == owner, \\\"INVALID_SIGNER\\\");\\n\\n            allowance[recoveredAddress][spender] = value;\\n        }\\n\\n        emit Approval(owner, spender, value);\\n    }\\n\\n    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();\\n    }\\n\\n    function computeDomainSeparator() internal view virtual returns (bytes32) {\\n        return\\n            keccak256(\\n                abi.encode(\\n                    keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"),\\n                    keccak256(bytes(name)),\\n                    keccak256(\\\"1\\\"),\\n                    block.chainid,\\n                    address(this)\\n                )\\n            );\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                        INTERNAL MINT/BURN LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function _mint(address to, uint256 amount) internal virtual {\\n        totalSupply += amount;\\n\\n        // Cannot overflow because the sum of all user\\n        // balances can't exceed the max uint256 value.\\n        unchecked {\\n            balanceOf[to] += amount;\\n        }\\n\\n        emit Transfer(address(0), to, amount);\\n    }\\n\\n    function _burn(address from, uint256 amount) internal virtual {\\n        balanceOf[from] -= amount;\\n\\n        // Cannot underflow because a user's balance\\n        // will never be larger than the total supply.\\n        unchecked {\\n            totalSupply -= amount;\\n        }\\n\\n        emit Transfer(from, address(0), amount);\\n    }\\n}\\n\",\"keccak256\":\"0x0240f7703cff32a61ee3e9fbb339e09a944260432a9ef37debf3692b1a6c8049\",\"license\":\"AGPL-3.0-only\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 20,
                "contract": "@rari-capital/solmate/src/tokens/ERC20.sol:ERC20",
                "label": "name",
                "offset": 0,
                "slot": "0",
                "type": "t_string_storage"
              },
              {
                "astId": 22,
                "contract": "@rari-capital/solmate/src/tokens/ERC20.sol:ERC20",
                "label": "symbol",
                "offset": 0,
                "slot": "1",
                "type": "t_string_storage"
              },
              {
                "astId": 26,
                "contract": "@rari-capital/solmate/src/tokens/ERC20.sol:ERC20",
                "label": "totalSupply",
                "offset": 0,
                "slot": "2",
                "type": "t_uint256"
              },
              {
                "astId": 30,
                "contract": "@rari-capital/solmate/src/tokens/ERC20.sol:ERC20",
                "label": "balanceOf",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 36,
                "contract": "@rari-capital/solmate/src/tokens/ERC20.sol:ERC20",
                "label": "allowance",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 44,
                "contract": "@rari-capital/solmate/src/tokens/ERC20.sol:ERC20",
                "label": "nonces",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "Modern and gas efficient ERC20 + EIP-2612 implementation.",
            "version": 1
          }
        }
      },
      "@rari-capital/solmate/src/utils/SafeTransferLib.sol": {
        "SafeTransferLib": {
          "abi": [],
          "devdoc": {
            "author": "Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)",
            "details": "Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller.",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ae794dc05d1677251bbff0c78ae40b874581f920da79a80a0dfaf87f2b3adace64736f6c634300080e0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT 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 LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE PUSH26 0x4DC05D1677251BBFF0C78AE40B874581F920DA79A80A0DFAF87F 0x2B GASPRICE 0xDA 0xCE PUSH5 0x736F6C6343 STOP ADDMOD 0xE STOP CALLER ",
              "sourceMap": "583:5196:1:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;583:5196:1;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ae794dc05d1677251bbff0c78ae40b874581f920da79a80a0dfaf87f2b3adace64736f6c634300080e0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE PUSH26 0x4DC05D1677251BBFF0C78AE40B874581F920DA79A80A0DFAF87F 0x2B GASPRICE 0xDA 0xCE PUSH5 0x736F6C6343 STOP ADDMOD 0xE STOP CALLER ",
              "sourceMap": "583:5196:1:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "103",
                "totalCost": "17303"
              },
              "internal": {
                "safeApprove(contract ERC20,address,uint256)": "infinite",
                "safeTransfer(contract ERC20,address,uint256)": "infinite",
                "safeTransferETH(address,uint256)": "infinite",
                "safeTransferFrom(contract ERC20,address,address,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.14+commit.80d49f37\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)\",\"details\":\"Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Safe ETH and ERC20 transfer library that gracefully handles missing return values.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rari-capital/solmate/src/utils/SafeTransferLib.sol\":\"SafeTransferLib\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@rari-capital/solmate/src/tokens/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.8.0;\\n\\n/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.\\n/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)\\n/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)\\n/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.\\nabstract contract ERC20 {\\n    /*//////////////////////////////////////////////////////////////\\n                                 EVENTS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            METADATA STORAGE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    string public name;\\n\\n    string public symbol;\\n\\n    uint8 public immutable decimals;\\n\\n    /*//////////////////////////////////////////////////////////////\\n                              ERC20 STORAGE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    uint256 public totalSupply;\\n\\n    mapping(address => uint256) public balanceOf;\\n\\n    mapping(address => mapping(address => uint256)) public allowance;\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            EIP-2612 STORAGE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    uint256 internal immutable INITIAL_CHAIN_ID;\\n\\n    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;\\n\\n    mapping(address => uint256) public nonces;\\n\\n    /*//////////////////////////////////////////////////////////////\\n                               CONSTRUCTOR\\n    //////////////////////////////////////////////////////////////*/\\n\\n    constructor(\\n        string memory _name,\\n        string memory _symbol,\\n        uint8 _decimals\\n    ) {\\n        name = _name;\\n        symbol = _symbol;\\n        decimals = _decimals;\\n\\n        INITIAL_CHAIN_ID = block.chainid;\\n        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                               ERC20 LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function approve(address spender, uint256 amount) public virtual returns (bool) {\\n        allowance[msg.sender][spender] = amount;\\n\\n        emit Approval(msg.sender, spender, amount);\\n\\n        return true;\\n    }\\n\\n    function transfer(address to, uint256 amount) public virtual returns (bool) {\\n        balanceOf[msg.sender] -= amount;\\n\\n        // Cannot overflow because the sum of all user\\n        // balances can't exceed the max uint256 value.\\n        unchecked {\\n            balanceOf[to] += amount;\\n        }\\n\\n        emit Transfer(msg.sender, to, amount);\\n\\n        return true;\\n    }\\n\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual returns (bool) {\\n        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.\\n\\n        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;\\n\\n        balanceOf[from] -= amount;\\n\\n        // Cannot overflow because the sum of all user\\n        // balances can't exceed the max uint256 value.\\n        unchecked {\\n            balanceOf[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        return true;\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                             EIP-2612 LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) public virtual {\\n        require(deadline >= block.timestamp, \\\"PERMIT_DEADLINE_EXPIRED\\\");\\n\\n        // Unchecked because the only math done is incrementing\\n        // the owner's nonce which cannot realistically overflow.\\n        unchecked {\\n            address recoveredAddress = ecrecover(\\n                keccak256(\\n                    abi.encodePacked(\\n                        \\\"\\\\x19\\\\x01\\\",\\n                        DOMAIN_SEPARATOR(),\\n                        keccak256(\\n                            abi.encode(\\n                                keccak256(\\n                                    \\\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\\\"\\n                                ),\\n                                owner,\\n                                spender,\\n                                value,\\n                                nonces[owner]++,\\n                                deadline\\n                            )\\n                        )\\n                    )\\n                ),\\n                v,\\n                r,\\n                s\\n            );\\n\\n            require(recoveredAddress != address(0) && recoveredAddress == owner, \\\"INVALID_SIGNER\\\");\\n\\n            allowance[recoveredAddress][spender] = value;\\n        }\\n\\n        emit Approval(owner, spender, value);\\n    }\\n\\n    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();\\n    }\\n\\n    function computeDomainSeparator() internal view virtual returns (bytes32) {\\n        return\\n            keccak256(\\n                abi.encode(\\n                    keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"),\\n                    keccak256(bytes(name)),\\n                    keccak256(\\\"1\\\"),\\n                    block.chainid,\\n                    address(this)\\n                )\\n            );\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                        INTERNAL MINT/BURN LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function _mint(address to, uint256 amount) internal virtual {\\n        totalSupply += amount;\\n\\n        // Cannot overflow because the sum of all user\\n        // balances can't exceed the max uint256 value.\\n        unchecked {\\n            balanceOf[to] += amount;\\n        }\\n\\n        emit Transfer(address(0), to, amount);\\n    }\\n\\n    function _burn(address from, uint256 amount) internal virtual {\\n        balanceOf[from] -= amount;\\n\\n        // Cannot underflow because a user's balance\\n        // will never be larger than the total supply.\\n        unchecked {\\n            totalSupply -= amount;\\n        }\\n\\n        emit Transfer(from, address(0), amount);\\n    }\\n}\\n\",\"keccak256\":\"0x0240f7703cff32a61ee3e9fbb339e09a944260432a9ef37debf3692b1a6c8049\",\"license\":\"AGPL-3.0-only\"},\"@rari-capital/solmate/src/utils/SafeTransferLib.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.8.0;\\n\\nimport {ERC20} from \\\"../tokens/ERC20.sol\\\";\\n\\n/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.\\n/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)\\n/// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.\\n/// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller.\\nlibrary SafeTransferLib {\\n    /*//////////////////////////////////////////////////////////////\\n                             ETH OPERATIONS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function safeTransferETH(address to, uint256 amount) internal {\\n        bool success;\\n\\n        assembly {\\n            // Transfer the ETH and store if it succeeded or not.\\n            success := call(gas(), to, amount, 0, 0, 0, 0)\\n        }\\n\\n        require(success, \\\"ETH_TRANSFER_FAILED\\\");\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            ERC20 OPERATIONS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function safeTransferFrom(\\n        ERC20 token,\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        bool success;\\n\\n        assembly {\\n            // Get a pointer to some free memory.\\n            let freeMemoryPointer := mload(0x40)\\n\\n            // Write the abi-encoded calldata into memory, beginning with the function selector.\\n            mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000)\\n            mstore(add(freeMemoryPointer, 4), from) // Append the \\\"from\\\" argument.\\n            mstore(add(freeMemoryPointer, 36), to) // Append the \\\"to\\\" argument.\\n            mstore(add(freeMemoryPointer, 68), amount) // Append the \\\"amount\\\" argument.\\n\\n            success := and(\\n                // Set success to whether the call reverted, if not we check it either\\n                // returned exactly 1 (can't just be non-zero data), or had no return data.\\n                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),\\n                // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3.\\n                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.\\n                // Counterintuitively, this call must be positioned second to the or() call in the\\n                // surrounding and() call or else returndatasize() will be zero during the computation.\\n                call(gas(), token, 0, freeMemoryPointer, 100, 0, 32)\\n            )\\n        }\\n\\n        require(success, \\\"TRANSFER_FROM_FAILED\\\");\\n    }\\n\\n    function safeTransfer(\\n        ERC20 token,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        bool success;\\n\\n        assembly {\\n            // Get a pointer to some free memory.\\n            let freeMemoryPointer := mload(0x40)\\n\\n            // Write the abi-encoded calldata into memory, beginning with the function selector.\\n            mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000)\\n            mstore(add(freeMemoryPointer, 4), to) // Append the \\\"to\\\" argument.\\n            mstore(add(freeMemoryPointer, 36), amount) // Append the \\\"amount\\\" argument.\\n\\n            success := and(\\n                // Set success to whether the call reverted, if not we check it either\\n                // returned exactly 1 (can't just be non-zero data), or had no return data.\\n                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),\\n                // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.\\n                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.\\n                // Counterintuitively, this call must be positioned second to the or() call in the\\n                // surrounding and() call or else returndatasize() will be zero during the computation.\\n                call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)\\n            )\\n        }\\n\\n        require(success, \\\"TRANSFER_FAILED\\\");\\n    }\\n\\n    function safeApprove(\\n        ERC20 token,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        bool success;\\n\\n        assembly {\\n            // Get a pointer to some free memory.\\n            let freeMemoryPointer := mload(0x40)\\n\\n            // Write the abi-encoded calldata into memory, beginning with the function selector.\\n            mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000)\\n            mstore(add(freeMemoryPointer, 4), to) // Append the \\\"to\\\" argument.\\n            mstore(add(freeMemoryPointer, 36), amount) // Append the \\\"amount\\\" argument.\\n\\n            success := and(\\n                // Set success to whether the call reverted, if not we check it either\\n                // returned exactly 1 (can't just be non-zero data), or had no return data.\\n                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),\\n                // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.\\n                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.\\n                // Counterintuitively, this call must be positioned second to the or() call in the\\n                // surrounding and() call or else returndatasize() will be zero during the computation.\\n                call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)\\n            )\\n        }\\n\\n        require(success, \\\"APPROVE_FAILED\\\");\\n    }\\n}\\n\",\"keccak256\":\"0xa28a1515702793c6b56b97272f75e05890fd82aa2e7ec47b41d4d56a81023f69\",\"license\":\"AGPL-3.0-only\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "Safe ETH and ERC20 transfer library that gracefully handles missing return values.",
            "version": 1
          }
        }
      },
      "contracts/splits/SplitMain.sol": {
        "SplitMain": {
          "abi": [
            {
              "inputs": [],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "Create2Error",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "CreateError",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newController",
                  "type": "address"
                }
              ],
              "name": "InvalidNewController",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "accountsLength",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "allocationsLength",
                  "type": "uint256"
                }
              ],
              "name": "InvalidSplit__AccountsAndAllocationsMismatch",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "InvalidSplit__AccountsOutOfOrder",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "InvalidSplit__AllocationMustBePositive",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint32",
                  "name": "allocationsSum",
                  "type": "uint32"
                }
              ],
              "name": "InvalidSplit__InvalidAllocationsSum",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint32",
                  "name": "distributorFee",
                  "type": "uint32"
                }
              ],
              "name": "InvalidSplit__InvalidDistributorFee",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "hash",
                  "type": "bytes32"
                }
              ],
              "name": "InvalidSplit__InvalidHash",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "accountsLength",
                  "type": "uint256"
                }
              ],
              "name": "InvalidSplit__TooFewAccounts",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "Unauthorized",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "name": "CancelControlTransfer",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "previousController",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newController",
                  "type": "address"
                }
              ],
              "name": "ControlTransfer",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "name": "CreateSplit",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "contract ERC20",
                  "name": "token",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "distributorAddress",
                  "type": "address"
                }
              ],
              "name": "DistributeERC20",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "distributorAddress",
                  "type": "address"
                }
              ],
              "name": "DistributeETH",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newPotentialController",
                  "type": "address"
                }
              ],
              "name": "InitiateControlTransfer",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "name": "UpdateSplit",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "ethAmount",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "contract ERC20[]",
                  "name": "tokens",
                  "type": "address[]"
                },
                {
                  "indexed": false,
                  "internalType": "uint256[]",
                  "name": "tokenAmounts",
                  "type": "uint256[]"
                }
              ],
              "name": "Withdrawal",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "PERCENTAGE_SCALE",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "name": "acceptControl",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "name": "cancelControlTransfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "percentAllocations",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint32",
                  "name": "distributorFee",
                  "type": "uint32"
                },
                {
                  "internalType": "address",
                  "name": "controller",
                  "type": "address"
                }
              ],
              "name": "createSplit",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "internalType": "contract ERC20",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "percentAllocations",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint32",
                  "name": "distributorFee",
                  "type": "uint32"
                },
                {
                  "internalType": "address",
                  "name": "distributorAddress",
                  "type": "address"
                }
              ],
              "name": "distributeERC20",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "percentAllocations",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint32",
                  "name": "distributorFee",
                  "type": "uint32"
                },
                {
                  "internalType": "address",
                  "name": "distributorAddress",
                  "type": "address"
                }
              ],
              "name": "distributeETH",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "name": "getController",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "contract ERC20",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "getERC20Balance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "getETHBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "name": "getHash",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "name": "getNewPotentialController",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "name": "makeSplitImmutable",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "percentAllocations",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint32",
                  "name": "distributorFee",
                  "type": "uint32"
                }
              ],
              "name": "predictImmutableSplitAddress",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "newController",
                  "type": "address"
                }
              ],
              "name": "transferControl",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "internalType": "contract ERC20",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "percentAllocations",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint32",
                  "name": "distributorFee",
                  "type": "uint32"
                },
                {
                  "internalType": "address",
                  "name": "distributorAddress",
                  "type": "address"
                }
              ],
              "name": "updateAndDistributeERC20",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "percentAllocations",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint32",
                  "name": "distributorFee",
                  "type": "uint32"
                },
                {
                  "internalType": "address",
                  "name": "distributorAddress",
                  "type": "address"
                }
              ],
              "name": "updateAndDistributeETH",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "percentAllocations",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint32",
                  "name": "distributorFee",
                  "type": "uint32"
                }
              ],
              "name": "updateSplit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "walletImplementation",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "withdrawETH",
                  "type": "uint256"
                },
                {
                  "internalType": "contract ERC20[]",
                  "name": "tokens",
                  "type": "address[]"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "stateMutability": "payable",
              "type": "receive"
            }
          ],
          "devdoc": {
            "author": "0xSplits <will@0xSplits.xyz>",
            "details": "Split recipients, ownerships, and keeper fees are stored onchain as calldata & re-passed as args / validated via hashing when needed. Each split gets its own address & proxy for maximum composability with other contracts onchain. For these proxies, we extended EIP-1167 Minimal Proxy Contract to avoid `DELEGATECALL` inside `receive()` to accept hard gas-capped `sends` & `transfers`.",
            "errors": {
              "InvalidNewController(address)": [
                {
                  "params": {
                    "newController": "Invalid new controller"
                  }
                }
              ],
              "InvalidSplit__AccountsAndAllocationsMismatch(uint256,uint256)": [
                {
                  "params": {
                    "accountsLength": "Length of accounts array",
                    "allocationsLength": "Length of percentAllocations array"
                  }
                }
              ],
              "InvalidSplit__AccountsOutOfOrder(uint256)": [
                {
                  "params": {
                    "index": "Index of out-of-order account"
                  }
                }
              ],
              "InvalidSplit__AllocationMustBePositive(uint256)": [
                {
                  "params": {
                    "index": "Index of zero percentAllocation"
                  }
                }
              ],
              "InvalidSplit__InvalidAllocationsSum(uint32)": [
                {
                  "params": {
                    "allocationsSum": "Sum of percentAllocations array"
                  }
                }
              ],
              "InvalidSplit__InvalidDistributorFee(uint32)": [
                {
                  "params": {
                    "distributorFee": "Invalid distributorFee amount"
                  }
                }
              ],
              "InvalidSplit__InvalidHash(bytes32)": [
                {
                  "params": {
                    "hash": "Invalid hash"
                  }
                }
              ],
              "InvalidSplit__TooFewAccounts(uint256)": [
                {
                  "params": {
                    "accountsLength": "Length of accounts array"
                  }
                }
              ],
              "Unauthorized(address)": [
                {
                  "params": {
                    "sender": "Transaction sender"
                  }
                }
              ]
            },
            "kind": "dev",
            "methods": {
              "acceptControl(address)": {
                "params": {
                  "split": "Address of mutable split to accept control transfer for"
                }
              },
              "cancelControlTransfer(address)": {
                "params": {
                  "split": "Address of mutable split to cancel control transfer for"
                }
              },
              "createSplit(address[],uint32[],uint32,address)": {
                "params": {
                  "accounts": "Ordered, unique list of addresses with ownership in the split",
                  "controller": "Controlling address (0x0 if immutable)",
                  "distributorFee": "Keeper fee paid by split to cover gas costs of distribution",
                  "percentAllocations": "Percent allocations associated with each address"
                },
                "returns": {
                  "split": "Address of newly created split"
                }
              },
              "distributeERC20(address,address,address[],uint32[],uint32,address)": {
                "details": "`accounts`, `percentAllocations`, and `distributorFee` are verified by hashing  & comparing to the hash in storage associated with split `split`pernicious ERC20s may cause overflow in this function inside  _scaleAmountByPercentage, but results do not affect ETH & other ERC20 balances",
                "params": {
                  "accounts": "Ordered, unique list of addresses with ownership in the split",
                  "distributorAddress": "Address to pay `distributorFee` to",
                  "distributorFee": "Keeper fee paid by split to cover gas costs of distribution",
                  "percentAllocations": "Percent allocations associated with each address",
                  "split": "Address of split to distribute balance for",
                  "token": "Address of ERC20 to distribute balance for"
                }
              },
              "distributeETH(address,address[],uint32[],uint32,address)": {
                "details": "`accounts`, `percentAllocations`, and `distributorFee` are verified by hashing  & comparing to the hash in storage associated with split `split`",
                "params": {
                  "accounts": "Ordered, unique list of addresses with ownership in the split",
                  "distributorAddress": "Address to pay `distributorFee` to",
                  "distributorFee": "Keeper fee paid by split to cover gas costs of distribution",
                  "percentAllocations": "Percent allocations associated with each address",
                  "split": "Address of split to distribute balance for"
                }
              },
              "getController(address)": {
                "params": {
                  "split": "Split to return controller for"
                },
                "returns": {
                  "_0": "Split's controller"
                }
              },
              "getERC20Balance(address,address)": {
                "params": {
                  "account": "Account to return ERC20 `token` balance for",
                  "token": "Token to return balance for"
                },
                "returns": {
                  "_0": "Account's balance of `token`"
                }
              },
              "getETHBalance(address)": {
                "params": {
                  "account": "Account to return ETH balance for"
                },
                "returns": {
                  "_0": "Account's balance of ETH"
                }
              },
              "getHash(address)": {
                "params": {
                  "split": "Split to return hash for"
                },
                "returns": {
                  "_0": "Split's hash"
                }
              },
              "getNewPotentialController(address)": {
                "params": {
                  "split": "Split to return newPotentialController for"
                },
                "returns": {
                  "_0": "Split's newPotentialController"
                }
              },
              "makeSplitImmutable(address)": {
                "params": {
                  "split": "Address of mutable split to turn immutable"
                }
              },
              "predictImmutableSplitAddress(address[],uint32[],uint32)": {
                "params": {
                  "accounts": "Ordered, unique list of addresses with ownership in the split",
                  "distributorFee": "Keeper fee paid by split to cover gas costs of distribution",
                  "percentAllocations": "Percent allocations associated with each address"
                },
                "returns": {
                  "split": "Predicted address of such an immutable split"
                }
              },
              "transferControl(address,address)": {
                "details": "Two-step control transfer inspired by [dharma](https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/helpers/TwoStepOwnable.sol)",
                "params": {
                  "newController": "Address to begin transferring control to",
                  "split": "Address of mutable split to transfer control for"
                }
              },
              "updateAndDistributeERC20(address,address,address[],uint32[],uint32,address)": {
                "details": "only callable by SplitControllerpernicious ERC20s may cause overflow in this function inside  _scaleAmountByPercentage, but results do not affect ETH & other ERC20 balances",
                "params": {
                  "accounts": "Ordered, unique list of addresses with ownership in the split",
                  "distributorAddress": "Address to pay `distributorFee` to",
                  "distributorFee": "Keeper fee paid by split to cover gas costs of distribution",
                  "percentAllocations": "Percent allocations associated with each address",
                  "split": "Address of split to distribute balance for",
                  "token": "Address of ERC20 to distribute balance for"
                }
              },
              "updateAndDistributeETH(address,address[],uint32[],uint32,address)": {
                "details": "only callable by SplitController",
                "params": {
                  "accounts": "Ordered, unique list of addresses with ownership in the split",
                  "distributorAddress": "Address to pay `distributorFee` to",
                  "distributorFee": "Keeper fee paid by split to cover gas costs of distribution",
                  "percentAllocations": "Percent allocations associated with each address",
                  "split": "Address of split to distribute balance for"
                }
              },
              "updateSplit(address,address[],uint32[],uint32)": {
                "params": {
                  "accounts": "Ordered, unique list of addresses with ownership in the split",
                  "distributorFee": "Keeper fee paid by split to cover gas costs of distribution",
                  "percentAllocations": "Percent allocations associated with each address",
                  "split": "Address of mutable split to update"
                }
              },
              "withdraw(address,uint256,address[])": {
                "params": {
                  "account": "Address to withdraw on behalf of",
                  "tokens": "Addresses of ERC20s to withdraw",
                  "withdrawETH": "Withdraw all ETH if nonzero"
                }
              }
            },
            "title": "SplitMain",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_768": {
                  "entryPoint": null,
                  "id": 768,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [],
              "linkReferences": {},
              "object": "60a06040523480156200001157600080fd5b50604051620000209062000050565b604051809103906000f0801580156200003d573d6000803e3d6000fd5b506001600160a01b03166080526200005e565b6103598062002eae83390190565b608051612e1f6200008f600039600081816102b001528181610ba801528181610f960152610fc70152612e1f6000f3fe6080604052600436106101185760003560e01c806377b1e4e9116100a0578063c7de644011610064578063c7de64401461034e578063d0e4b2f41461036e578063e10e51d61461038e578063e61cb05e146103cb578063ecef0ace146103eb57600080fd5b806377b1e4e91461027e5780638117abc11461029e57806388c662aa146102d2578063a5e3909e1461030e578063c3a8962c1461032e57600080fd5b80633bb66a7b116100e75780633bb66a7b146101cf5780633f26479e146101ef57806352844dd3146102065780636e5f69191461023e5780637601f7821461025e57600080fd5b80631267c6da146101245780631581130214610146578063189cbaa0146101665780631da0b8fc1461018657600080fd5b3661011f57005b600080fd5b34801561013057600080fd5b5061014461013f366004612806565b61040b565b005b34801561015257600080fd5b50610144610161366004612883565b6104a6565b34801561017257600080fd5b50610144610181366004612806565b6107e0565b34801561019257600080fd5b506101bc6101a1366004612806565b6001600160a01b031660009081526002602052604090205490565b6040519081526020015b60405180910390f35b3480156101db57600080fd5b506101bc6101ea366004612806565b6108ab565b3480156101fb57600080fd5b506101bc620f424081565b34801561021257600080fd5b5061022661022136600461293d565b610906565b6040516001600160a01b0390911681526020016101c6565b34801561024a57600080fd5b506101446102593660046129be565b610bdb565b34801561026a57600080fd5b50610226610279366004612a1a565b610ce6565b34801561028a57600080fd5b50610144610299366004612883565b61106e565b3480156102aa57600080fd5b506102267f000000000000000000000000000000000000000000000000000000000000000081565b3480156102de57600080fd5b506102266102ed366004612806565b6001600160a01b039081166000908152600260205260409020600101541690565b34801561031a57600080fd5b50610144610329366004612aae565b611377565b34801561033a57600080fd5b506101bc610349366004612b56565b611660565b34801561035a57600080fd5b50610144610369366004612806565b611727565b34801561037a57600080fd5b50610144610389366004612b56565b6117f6565b34801561039a57600080fd5b506102266103a9366004612806565b6001600160a01b03908116600090815260026020819052604090912001541690565b3480156103d757600080fd5b506101446103e6366004612aae565b6118c8565b3480156103f757600080fd5b50610144610406366004612b8f565b611bde565b6001600160a01b0381811660009081526002602052604090206001015482911633146104515760405163472511eb60e11b81523360048201526024015b60405180910390fd5b6001600160a01b038216600081815260026020819052604080832090910180546001600160a01b0319169055517f6c2460a415b84be3720c209fe02f2cad7a6bcba21e8637afe8957b7ec4b6ef879190a25050565b85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092019190915250508351869250600211159050610535578251604051630e8c626560e41b815260040161044891815260200190565b8151835114610564578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f424061057183611e55565b63ffffffff16146105a75761058582611e55565b60405163fcc487c160e01b815263ffffffff9091166004820152602401610448565b82516000190160005b81811015610673578481600101815181106105cd576105cd612c21565b60200260200101516001600160a01b03168582815181106105f0576105f0612c21565b60200260200101516001600160a01b0316106106225760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff1684828151811061063c5761063c612c21565b602002602001015163ffffffff160361066b57604051630db7e4c760e01b815260048101829052602401610448565b6001016105b0565b50600063ffffffff1683828151811061068e5761068e612c21565b602002602001015163ffffffff16036106bd57604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff1611156106f05760405163308440e360e21b815263ffffffff82166004820152602401610448565b6107608b8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611e9a915050565b6107d38b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c92508b9150611eec9050565b5050505050505050505050565b6001600160a01b0381811660009081526002602052604090206001015482911633146108215760405163472511eb60e11b8152336004820152602401610448565b6001600160a01b03808316600081815260026020819052604080832091820180546001600160a01b0319169055600190910154905191931691907f943d69cf2bbe08a9d44b3c4ce6da17d939d758739370620871ce99a6437866d0908490a4506001600160a01b0316600090815260026020526040902060010180546001600160a01b0319169055565b6001600160a01b03811660009081526002602052604081205481036108d15760006108dd565b816001600160a01b0316315b6001600160a01b0383166000908152602081905260409020546109009190612c4d565b92915050565b600085858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092019190915250508351869250600211159050610997578251604051630e8c626560e41b815260040161044891815260200190565b81518351146109c6578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f42406109d383611e55565b63ffffffff16146109e75761058582611e55565b82516000190160005b81811015610ab357848160010181518110610a0d57610a0d612c21565b60200260200101516001600160a01b0316858281518110610a3057610a30612c21565b60200260200101516001600160a01b031610610a625760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff16848281518110610a7c57610a7c612c21565b602002602001015163ffffffff1603610aab57604051630db7e4c760e01b815260048101829052602401610448565b6001016109f0565b50600063ffffffff16838281518110610ace57610ace612c21565b602002602001015163ffffffff1603610afd57604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff161115610b305760405163308440e360e21b815263ffffffff82166004820152602401610448565b6000610ba18a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b925061219b915050565b9050610bcd7f0000000000000000000000000000000000000000000000000000000000000000826121d1565b9a9950505050505050505050565b60008167ffffffffffffffff811115610bf657610bf6612c65565b604051908082528060200260200182016040528015610c1f578160200160208202803683370190505b50905060008415610c3657610c3386612276565b90505b60005b83811015610c9657610c7187868684818110610c5757610c57612c21565b9050602002016020810190610c6c9190612806565b6122c9565b838281518110610c8357610c83612c21565b6020908102919091010152600101610c39565b50856001600160a01b03167fa9e30bf144f83390a4fe47562a4e16892108102221c674ff538da0b72a83d17482868686604051610cd69493929190612c7b565b60405180910390a2505050505050565b600086868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a02828101820190935289825290935089925088918291850190849080828437600092019190915250508351879250600211159050610d77578251604051630e8c626560e41b815260040161044891815260200190565b8151835114610da6578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f4240610db383611e55565b63ffffffff1614610dc75761058582611e55565b82516000190160005b81811015610e9357848160010181518110610ded57610ded612c21565b60200260200101516001600160a01b0316858281518110610e1057610e10612c21565b60200260200101516001600160a01b031610610e425760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff16848281518110610e5c57610e5c612c21565b602002602001015163ffffffff1603610e8b57604051630db7e4c760e01b815260048101829052602401610448565b600101610dd0565b50600063ffffffff16838281518110610eae57610eae612c21565b602002602001015163ffffffff1603610edd57604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff161115610f105760405163308440e360e21b815263ffffffff82166004820152602401610448565b6000610f818b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c925061219b915050565b90506001600160a01b038616610fc257610fbb7f000000000000000000000000000000000000000000000000000000000000000082612335565b945061101f565b610feb7f00000000000000000000000000000000000000000000000000000000000000006123e5565b6001600160a01b03818116600090815260026020526040902060010180546001600160a01b03191691891691909117905594505b6001600160a01b038516600081815260026020526040808220849055517f8d5f9943c664a3edaf4d3eb18cc5e2c45a7d2dc5869be33d33bbc0fff9bc25909190a2505050509695505050505050565b6001600160a01b0388811660009081526002602052604090206001015489911633146110af5760405163472511eb60e11b8152336004820152602401610448565b86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a0282810182019093528982529093508992508891829185019084908082843760009201919091525050835187925060021115905061113e578251604051630e8c626560e41b815260040161044891815260200190565b815183511461116d578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f424061117a83611e55565b63ffffffff161461118e5761058582611e55565b82516000190160005b8181101561125a578481600101815181106111b4576111b4612c21565b60200260200101516001600160a01b03168582815181106111d7576111d7612c21565b60200260200101516001600160a01b0316106112095760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff1684828151811061122357611223612c21565b602002602001015163ffffffff160361125257604051630db7e4c760e01b815260048101829052602401610448565b600101611197565b50600063ffffffff1683828151811061127557611275612c21565b602002602001015163ffffffff16036112a457604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff1611156112d75760405163308440e360e21b815263ffffffff82166004820152602401610448565b6112e58c8b8b8b8b8b612494565b6113698c8c8c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508d92508c9150611eec9050565b505050505050505050505050565b6001600160a01b0387811660009081526002602052604090206001015488911633146113b85760405163472511eb60e11b8152336004820152602401610448565b86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a02828101820190935289825290935089925088918291850190849080828437600092019190915250508351879250600211159050611447578251604051630e8c626560e41b815260040161044891815260200190565b8151835114611476578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f424061148383611e55565b63ffffffff16146114975761058582611e55565b82516000190160005b81811015611563578481600101815181106114bd576114bd612c21565b60200260200101516001600160a01b03168582815181106114e0576114e0612c21565b60200260200101516001600160a01b0316106115125760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff1684828151811061152c5761152c612c21565b602002602001015163ffffffff160361155b57604051630db7e4c760e01b815260048101829052602401610448565b6001016114a0565b50600063ffffffff1683828151811061157e5761157e612c21565b602002602001015163ffffffff16036115ad57604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff1611156115e05760405163308440e360e21b815263ffffffff82166004820152602401610448565b6115ee8b8b8b8b8b8b612494565b6107d38b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c92508b91506125549050565b6001600160a01b03821660009081526002602052604081205481036116865760006116f0565b6040516370a0823160e01b81526001600160a01b0384811660048301528316906370a0823190602401602060405180830381865afa1580156116cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f09190612d0c565b6001600160a01b038084166000908152600160209081526040808320938816835292905220546117209190612c4d565b9392505050565b6001600160a01b038181166000908152600260208190526040909120015482911633146117695760405163472511eb60e11b8152336004820152602401610448565b6001600160a01b03808316600081815260026020819052604080832091820180546001600160a01b0319169055600190910154905133949190911692917f943d69cf2bbe08a9d44b3c4ce6da17d939d758739370620871ce99a6437866d091a4506001600160a01b0316600090815260026020526040902060010180546001600160a01b03191633179055565b6001600160a01b0382811660009081526002602052604090206001015483911633146118375760405163472511eb60e11b8152336004820152602401610448565b816001600160a01b03811661186a5760405163c369130760e01b81526001600160a01b0382166004820152602401610448565b6001600160a01b03848116600081815260026020819052604080832090910180546001600160a01b0319169488169485179055517f107cf6ea8668d533df1aab5bb8b6315bb0c25f0b6c955558d09368f290668fc79190a350505050565b85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092019190915250508351869250600211159050611957578251604051630e8c626560e41b815260040161044891815260200190565b8151835114611986578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f424061199383611e55565b63ffffffff16146119a75761058582611e55565b82516000190160005b81811015611a73578481600101815181106119cd576119cd612c21565b60200260200101516001600160a01b03168582815181106119f0576119f0612c21565b60200260200101516001600160a01b031610611a225760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff16848281518110611a3c57611a3c612c21565b602002602001015163ffffffff1603611a6b57604051630db7e4c760e01b815260048101829052602401610448565b6001016119b0565b50600063ffffffff16838281518110611a8e57611a8e612c21565b602002602001015163ffffffff1603611abd57604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff161115611af05760405163308440e360e21b815263ffffffff82166004820152602401610448565b611b608a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611e9a915050565b611bd28a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b92508a91506125549050565b50505050505050505050565b6001600160a01b038681166000908152600260205260409020600101548791163314611c1f5760405163472511eb60e11b8152336004820152602401610448565b85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092019190915250508351869250600211159050611cae578251604051630e8c626560e41b815260040161044891815260200190565b8151835114611cdd578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f4240611cea83611e55565b63ffffffff1614611cfe5761058582611e55565b82516000190160005b81811015611dca57848160010181518110611d2457611d24612c21565b60200260200101516001600160a01b0316858281518110611d4757611d47612c21565b60200260200101516001600160a01b031610611d795760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff16848281518110611d9357611d93612c21565b602002602001015163ffffffff1603611dc257604051630db7e4c760e01b815260048101829052602401610448565b600101611d07565b50600063ffffffff16838281518110611de557611de5612c21565b602002602001015163ffffffff1603611e1457604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff161115611e475760405163308440e360e21b815263ffffffff82166004820152602401610448565b611bd28a8a8a8a8a8a612494565b8051600090815b81811015611e9357838181518110611e7657611e76612c21565b602002602001015183611e899190612d25565b9250600101611e5c565b5050919050565b6000611ea784848461219b565b6001600160a01b0386166000908152600260205260409020549091508114611ee55760405163dd5ff45760e01b815260048101829052602401610448565b5050505050565b6001600160a01b038581166000818152600160209081526040808320948b16808452949091528082205490516370a0823160e01b815260048101949094529092909183916370a0823190602401602060405180830381865afa158015611f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7a9190612d0c565b90508015611f8757600019015b8115611f94576001820391505b81810192508115611fc8576001600160a01b038089166000908152600160208181526040808420948e168452939052919020555b836001600160a01b0316886001600160a01b03168a6001600160a01b03167fb5ee5dc3d2c31a019bbf2c787e0e9c97971c96aceea1c38c12fc8fd25c536d468660405161201791815260200190565b60405180910390a463ffffffff851615612089576001600160a01b038881166000908152600160205260408120620f424063ffffffff89168702049283929088166120625733612064565b875b6001600160a01b03168152602081019190915260400160002080549091019055909203915b865160005b81811015612125576120c4858983815181106120ac576120ac612c21565b602002602001015163ffffffff16620f424091020490565b6001600160a01b038b1660009081526001602052604081208b519091908c90859081106120f3576120f3612c21565b6020908102919091018101516001600160a01b031682528101919091526040016000208054909101905560010161208e565b5050801561219057604051633e0f9fff60e11b81526001600160a01b038981166004830152602482018390528a1690637c1f3ffe90604401600060405180830381600087803b15801561217757600080fd5b505af115801561218b573d6000803e3d6000fd5b505050505b505050505050505050565b60008383836040516020016121b293929190612d4d565b6040516020818303038152906040528051906020012090509392505050565b6000611720838330604051723d605d80600a3d3981f336603057343d52307f60681b81527f830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b160138201527260203da23d3df35b3d3d3d3d363d3d37363d7360681b6033820152606093841b60468201526d5af43d3d93803e605b57fd5bf3ff60901b605a820152921b6068830152607c8201526067808220609c830152605591012090565b6001600160a01b03811660009081526020819052604081205461229b90600190612dd2565b6001600160a01b0383166000818152602081905260409020600190559091506122c4908261271a565b919050565b6001600160a01b03808216600090815260016020818152604080842094871684529390529181205490916122fc91612dd2565b6001600160a01b038084166000818152600160208181526040808420958a16845294905292902091909155909150610900908483612770565b6000604051723d605d80600a3d3981f336603057343d52307f60681b81527f830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b160138201527260203da23d3df35b3d3d3d3d363d3d37363d7360681b60338201528360601b60468201526c5af43d3d93803e605b57fd5bf360981b605a820152826067826000f59150506001600160a01b0381166109005760405163380bbe1360e01b815260040160405180910390fd5b6000604051723d605d80600a3d3981f336603057343d52307f60681b81527f830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b160138201527260203da23d3df35b3d3d3d3d363d3d37363d7360681b60338201528260601b60468201526c5af43d3d93803e605b57fd5bf360981b605a8201526067816000f09150506001600160a01b0381166122c457604051630985da9b60e41b815260040160405180910390fd5b600061250586868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a0282810182019093528982529093508992508891829185019084908082843760009201919091525087925061219b915050565b6001600160a01b0388166000818152600260205260408082208490555192935090917f45e1e99513dd915ac128b94953ca64c6375717ea1894b3114db08cdca51debd29190a250505050505050565b6001600160a01b038516600081815260208190526040812054913190821561257d576001830392505b5081810182156125a4576001600160a01b0388166000908152602081905260409020600190555b836001600160a01b0316886001600160a01b03167f87c3ca0a87d9b82033e4bc55e6d30621f8d7e0c9d8ca7988edfde8932787b77b836040516125e991815260200190565b60405180910390a363ffffffff85161561264857620f424063ffffffff8616820204806000806001600160a01b0388166126235733612625565b875b6001600160a01b0316815260208101919091526040016000208054909101905590035b865160005b818110156126b25761266b838983815181106120ac576120ac612c21565b6000808b848151811061268057612680612c21565b6020908102919091018101516001600160a01b031682528101919091526040016000208054909101905560010161264d565b5050811561271057604051632ac3affd60e21b8152600481018390526001600160a01b0389169063ab0ebff490602401600060405180830381600087803b1580156126fc57600080fd5b505af1158015611369573d6000803e3d6000fd5b5050505050505050565b600080600080600085875af190508061276b5760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610448565b505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806127e85760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610448565b50505050565b6001600160a01b038116811461280357600080fd5b50565b60006020828403121561281857600080fd5b8135611720816127ee565b60008083601f84011261283557600080fd5b50813567ffffffffffffffff81111561284d57600080fd5b6020830191508360208260051b850101111561286857600080fd5b9250929050565b803563ffffffff811681146122c457600080fd5b60008060008060008060008060c0898b03121561289f57600080fd5b88356128aa816127ee565b975060208901356128ba816127ee565b9650604089013567ffffffffffffffff808211156128d757600080fd5b6128e38c838d01612823565b909850965060608b01359150808211156128fc57600080fd5b506129098b828c01612823565b909550935061291c905060808a0161286f565b915060a089013561292c816127ee565b809150509295985092959890939650565b60008060008060006060868803121561295557600080fd5b853567ffffffffffffffff8082111561296d57600080fd5b61297989838a01612823565b9097509550602088013591508082111561299257600080fd5b5061299f88828901612823565b90945092506129b290506040870161286f565b90509295509295909350565b600080600080606085870312156129d457600080fd5b84356129df816127ee565b935060208501359250604085013567ffffffffffffffff811115612a0257600080fd5b612a0e87828801612823565b95989497509550505050565b60008060008060008060808789031215612a3357600080fd5b863567ffffffffffffffff80821115612a4b57600080fd5b612a578a838b01612823565b90985096506020890135915080821115612a7057600080fd5b50612a7d89828a01612823565b9095509350612a9090506040880161286f565b91506060870135612aa0816127ee565b809150509295509295509295565b600080600080600080600060a0888a031215612ac957600080fd5b8735612ad4816127ee565b9650602088013567ffffffffffffffff80821115612af157600080fd5b612afd8b838c01612823565b909850965060408a0135915080821115612b1657600080fd5b50612b238a828b01612823565b9095509350612b3690506060890161286f565b91506080880135612b46816127ee565b8091505092959891949750929550565b60008060408385031215612b6957600080fd5b8235612b74816127ee565b91506020830135612b84816127ee565b809150509250929050565b60008060008060008060808789031215612ba857600080fd5b8635612bb3816127ee565b9550602087013567ffffffffffffffff80821115612bd057600080fd5b612bdc8a838b01612823565b90975095506040890135915080821115612bf557600080fd5b50612c0289828a01612823565b9094509250612c1590506060880161286f565b90509295509295509295565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115612c6057612c60612c37565b500190565b634e487b7160e01b600052604160045260246000fd5b84815260606020808301829052908201849052600090859060808401835b87811015612cc7578335612cac816127ee565b6001600160a01b031682529282019290820190600101612c99565b508481036040860152855180825290820192508186019060005b81811015612cfd57825185529383019391830191600101612ce1565b50929998505050505050505050565b600060208284031215612d1e57600080fd5b5051919050565b600063ffffffff808316818516808303821115612d4457612d44612c37565b01949350505050565b835160009082906020808801845b83811015612d805781516001600160a01b031685529382019390820190600101612d5b565b5050865181880193925060005b81811015612daf57845163ffffffff1684529382019392820192600101612d8d565b50505060e09490941b6001600160e01b0319168452505060049091019392505050565b600082821015612de457612de4612c37565b50039056fea264697066735822122036248c612dea843014ab79dee61a4d70e576e11e62076d81354af9b8819f4d0164736f6c634300080e003360a060405234801561001057600080fd5b503360805260805161030f61004a60003960008181604b0152818160bc015281816101080152818161013c0152610186015261030f6000f3fe6080604052600436106100345760003560e01c80630e769b2b146100395780637c1f3ffe14610089578063ab0ebff41461009e575b600080fd5b34801561004557600080fd5b5061006d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61009c610097366004610288565b6100b1565b005b61009c6100ac3660046102c0565b610131565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100f9576040516282b42960e81b815260040160405180910390fd5b61012d6001600160a01b0383167f0000000000000000000000000000000000000000000000000000000000000000836101af565b5050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610179576040516282b42960e81b815260040160405180910390fd5b6101ac6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682610232565b50565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d116001600051141617169150508061022c5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064015b60405180910390fd5b50505050565b600080600080600085875af19050806102835760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610223565b505050565b6000806040838503121561029b57600080fd5b82356001600160a01b03811681146102b257600080fd5b946020939093013593505050565b6000602082840312156102d257600080fd5b503591905056fea26469706673582212200bb8e05942a07394b216a789ce945af3e46d15ad1f61166d75b0a6baaf3b884e64736f6c634300080e0033",
              "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x20 SWAP1 PUSH3 0x50 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH3 0x5E JUMP JUMPDEST PUSH2 0x359 DUP1 PUSH3 0x2EAE DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x2E1F PUSH3 0x8F PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x2B0 ADD MSTORE DUP2 DUP2 PUSH2 0xBA8 ADD MSTORE DUP2 DUP2 PUSH2 0xF96 ADD MSTORE PUSH2 0xFC7 ADD MSTORE PUSH2 0x2E1F PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x118 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x77B1E4E9 GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xC7DE6440 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xC7DE6440 EQ PUSH2 0x34E JUMPI DUP1 PUSH4 0xD0E4B2F4 EQ PUSH2 0x36E JUMPI DUP1 PUSH4 0xE10E51D6 EQ PUSH2 0x38E JUMPI DUP1 PUSH4 0xE61CB05E EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0xECEF0ACE EQ PUSH2 0x3EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x77B1E4E9 EQ PUSH2 0x27E JUMPI DUP1 PUSH4 0x8117ABC1 EQ PUSH2 0x29E JUMPI DUP1 PUSH4 0x88C662AA EQ PUSH2 0x2D2 JUMPI DUP1 PUSH4 0xA5E3909E EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0xC3A8962C EQ PUSH2 0x32E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3BB66A7B GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x3BB66A7B EQ PUSH2 0x1CF JUMPI DUP1 PUSH4 0x3F26479E EQ PUSH2 0x1EF JUMPI DUP1 PUSH4 0x52844DD3 EQ PUSH2 0x206 JUMPI DUP1 PUSH4 0x6E5F6919 EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0x7601F782 EQ PUSH2 0x25E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1267C6DA EQ PUSH2 0x124 JUMPI DUP1 PUSH4 0x15811302 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x189CBAA0 EQ PUSH2 0x166 JUMPI DUP1 PUSH4 0x1DA0B8FC EQ PUSH2 0x186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x11F JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x13F CALLDATASIZE PUSH1 0x4 PUSH2 0x2806 JUMP JUMPDEST PUSH2 0x40B JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x161 CALLDATASIZE PUSH1 0x4 PUSH2 0x2883 JUMP JUMPDEST PUSH2 0x4A6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x172 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x181 CALLDATASIZE PUSH1 0x4 PUSH2 0x2806 JUMP JUMPDEST PUSH2 0x7E0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x1A1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2806 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x1EA CALLDATASIZE PUSH1 0x4 PUSH2 0x2806 JUMP JUMPDEST PUSH2 0x8AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH3 0xF4240 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x221 CALLDATASIZE PUSH1 0x4 PUSH2 0x293D JUMP JUMPDEST PUSH2 0x906 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1C6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x259 CALLDATASIZE PUSH1 0x4 PUSH2 0x29BE JUMP JUMPDEST PUSH2 0xBDB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x279 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A1A JUMP JUMPDEST PUSH2 0xCE6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x299 CALLDATASIZE PUSH1 0x4 PUSH2 0x2883 JUMP JUMPDEST PUSH2 0x106E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x2ED CALLDATASIZE PUSH1 0x4 PUSH2 0x2806 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x31A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x329 CALLDATASIZE PUSH1 0x4 PUSH2 0x2AAE JUMP JUMPDEST PUSH2 0x1377 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x349 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B56 JUMP JUMPDEST PUSH2 0x1660 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x369 CALLDATASIZE PUSH1 0x4 PUSH2 0x2806 JUMP JUMPDEST PUSH2 0x1727 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x389 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B56 JUMP JUMPDEST PUSH2 0x17F6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x39A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x3A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x2806 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x3E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2AAE JUMP JUMPDEST PUSH2 0x18C8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x406 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B8F JUMP JUMPDEST PUSH2 0x1BDE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x451 JUMPI PUSH1 0x40 MLOAD PUSH4 0x472511EB PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE MLOAD PUSH32 0x6C2460A415B84BE3720C209FE02F2CAD7A6BCBA21E8637AFE8957B7EC4B6EF87 SWAP2 SWAP1 LOG2 POP POP JUMP JUMPDEST DUP6 DUP6 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP10 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP9 DUP3 MSTORE SWAP1 SWAP4 POP DUP9 SWAP3 POP DUP8 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP DUP4 MLOAD DUP7 SWAP3 POP PUSH1 0x2 GT ISZERO SWAP1 POP PUSH2 0x535 JUMPI DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xE8C6265 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0x564 JUMPI DUP3 MLOAD DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xB34F351D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x448 JUMP JUMPDEST PUSH3 0xF4240 PUSH2 0x571 DUP4 PUSH2 0x1E55 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x5A7 JUMPI PUSH2 0x585 DUP3 PUSH2 0x1E55 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFCC487C1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 NOT ADD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x673 JUMPI DUP5 DUP2 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x5CD JUMPI PUSH2 0x5CD PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x5F0 JUMPI PUSH2 0x5F0 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x622 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAC6BD233 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x63C JUMPI PUSH2 0x63C PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x66B JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x5B0 JUMP JUMPDEST POP PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x68E JUMPI PUSH2 0x68E PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x6BD JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST POP PUSH3 0x186A0 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x6F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x308440E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH2 0x760 DUP12 DUP11 DUP11 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP15 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP14 DUP3 MSTORE SWAP1 SWAP4 POP DUP14 SWAP3 POP DUP13 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP12 SWAP3 POP PUSH2 0x1E9A SWAP2 POP POP JUMP JUMPDEST PUSH2 0x7D3 DUP12 DUP12 DUP12 DUP12 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP16 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP15 DUP3 MSTORE SWAP1 SWAP4 POP DUP15 SWAP3 POP DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP13 SWAP3 POP DUP12 SWAP2 POP PUSH2 0x1EEC SWAP1 POP JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x821 JUMPI PUSH1 0x40 MLOAD PUSH4 0x472511EB PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP2 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP1 MLOAD SWAP2 SWAP4 AND SWAP2 SWAP1 PUSH32 0x943D69CF2BBE08A9D44B3C4CE6DA17D939D758739370620871CE99A6437866D0 SWAP1 DUP5 SWAP1 LOG4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SUB PUSH2 0x8D1 JUMPI PUSH1 0x0 PUSH2 0x8DD JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND BALANCE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x900 SWAP2 SWAP1 PUSH2 0x2C4D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP10 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP9 DUP3 MSTORE SWAP1 SWAP4 POP DUP9 SWAP3 POP DUP8 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP DUP4 MLOAD DUP7 SWAP3 POP PUSH1 0x2 GT ISZERO SWAP1 POP PUSH2 0x997 JUMPI DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xE8C6265 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0x9C6 JUMPI DUP3 MLOAD DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xB34F351D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x448 JUMP JUMPDEST PUSH3 0xF4240 PUSH2 0x9D3 DUP4 PUSH2 0x1E55 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x9E7 JUMPI PUSH2 0x585 DUP3 PUSH2 0x1E55 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 NOT ADD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAB3 JUMPI DUP5 DUP2 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0xA0D JUMPI PUSH2 0xA0D PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xA30 JUMPI PUSH2 0xA30 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0xA62 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAC6BD233 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xA7C JUMPI PUSH2 0xA7C PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0xAAB JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x9F0 JUMP JUMPDEST POP PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xACE JUMPI PUSH2 0xACE PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0xAFD JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST POP PUSH3 0x186A0 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0xB30 JUMPI PUSH1 0x40 MLOAD PUSH4 0x308440E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBA1 DUP11 DUP11 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP15 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP14 DUP3 MSTORE SWAP1 SWAP4 POP DUP14 SWAP3 POP DUP13 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP12 SWAP3 POP PUSH2 0x219B SWAP2 POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0xBCD PUSH32 0x0 DUP3 PUSH2 0x21D1 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBF6 JUMPI PUSH2 0xBF6 PUSH2 0x2C65 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xC1F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP5 ISZERO PUSH2 0xC36 JUMPI PUSH2 0xC33 DUP7 PUSH2 0x2276 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xC96 JUMPI PUSH2 0xC71 DUP8 DUP7 DUP7 DUP5 DUP2 DUP2 LT PUSH2 0xC57 JUMPI PUSH2 0xC57 PUSH2 0x2C21 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xC6C SWAP2 SWAP1 PUSH2 0x2806 JUMP JUMPDEST PUSH2 0x22C9 JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC83 JUMPI PUSH2 0xC83 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xC39 JUMP JUMPDEST POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xA9E30BF144F83390A4FE47562A4E16892108102221C674FF538DA0B72A83D174 DUP3 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0xCD6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2C7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP11 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP10 DUP3 MSTORE SWAP1 SWAP4 POP DUP10 SWAP3 POP DUP9 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP DUP4 MLOAD DUP8 SWAP3 POP PUSH1 0x2 GT ISZERO SWAP1 POP PUSH2 0xD77 JUMPI DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xE8C6265 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0xDA6 JUMPI DUP3 MLOAD DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xB34F351D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x448 JUMP JUMPDEST PUSH3 0xF4240 PUSH2 0xDB3 DUP4 PUSH2 0x1E55 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0xDC7 JUMPI PUSH2 0x585 DUP3 PUSH2 0x1E55 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 NOT ADD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xE93 JUMPI DUP5 DUP2 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0xDED JUMPI PUSH2 0xDED PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xE10 JUMPI PUSH2 0xE10 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0xE42 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAC6BD233 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xE5C JUMPI PUSH2 0xE5C PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0xE8B JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xDD0 JUMP JUMPDEST POP PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xEAE JUMPI PUSH2 0xEAE PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0xEDD JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST POP PUSH3 0x186A0 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0xF10 JUMPI PUSH1 0x40 MLOAD PUSH4 0x308440E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF81 DUP12 DUP12 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP16 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP15 DUP3 MSTORE SWAP1 SWAP4 POP DUP15 SWAP3 POP DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP13 SWAP3 POP PUSH2 0x219B SWAP2 POP POP JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0xFC2 JUMPI PUSH2 0xFBB PUSH32 0x0 DUP3 PUSH2 0x2335 JUMP JUMPDEST SWAP5 POP PUSH2 0x101F JUMP JUMPDEST PUSH2 0xFEB PUSH32 0x0 PUSH2 0x23E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 DUP10 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE SWAP5 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8D5F9943C664A3EDAF4D3EB18CC5E2C45A7D2DC5869BE33D33BBC0FFF9BC2590 SWAP2 SWAP1 LOG2 POP POP POP POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP10 SWAP2 AND CALLER EQ PUSH2 0x10AF JUMPI PUSH1 0x40 MLOAD PUSH4 0x472511EB PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP11 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP10 DUP3 MSTORE SWAP1 SWAP4 POP DUP10 SWAP3 POP DUP9 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP DUP4 MLOAD DUP8 SWAP3 POP PUSH1 0x2 GT ISZERO SWAP1 POP PUSH2 0x113E JUMPI DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xE8C6265 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0x116D JUMPI DUP3 MLOAD DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xB34F351D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x448 JUMP JUMPDEST PUSH3 0xF4240 PUSH2 0x117A DUP4 PUSH2 0x1E55 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x118E JUMPI PUSH2 0x585 DUP3 PUSH2 0x1E55 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 NOT ADD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x125A JUMPI DUP5 DUP2 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x11B4 JUMPI PUSH2 0x11B4 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x11D7 JUMPI PUSH2 0x11D7 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x1209 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAC6BD233 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1223 JUMPI PUSH2 0x1223 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x1252 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1197 JUMP JUMPDEST POP PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1275 JUMPI PUSH2 0x1275 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x12A4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST POP PUSH3 0x186A0 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x12D7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x308440E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH2 0x12E5 DUP13 DUP12 DUP12 DUP12 DUP12 DUP12 PUSH2 0x2494 JUMP JUMPDEST PUSH2 0x1369 DUP13 DUP13 DUP13 DUP13 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP12 DUP12 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 DUP14 SWAP3 POP DUP13 SWAP2 POP PUSH2 0x1EEC SWAP1 POP JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP9 SWAP2 AND CALLER EQ PUSH2 0x13B8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x472511EB PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP11 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP10 DUP3 MSTORE SWAP1 SWAP4 POP DUP10 SWAP3 POP DUP9 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP DUP4 MLOAD DUP8 SWAP3 POP PUSH1 0x2 GT ISZERO SWAP1 POP PUSH2 0x1447 JUMPI DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xE8C6265 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0x1476 JUMPI DUP3 MLOAD DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xB34F351D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x448 JUMP JUMPDEST PUSH3 0xF4240 PUSH2 0x1483 DUP4 PUSH2 0x1E55 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1497 JUMPI PUSH2 0x585 DUP3 PUSH2 0x1E55 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 NOT ADD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1563 JUMPI DUP5 DUP2 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x14BD JUMPI PUSH2 0x14BD PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x14E0 JUMPI PUSH2 0x14E0 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x1512 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAC6BD233 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x152C JUMPI PUSH2 0x152C PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x155B JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x14A0 JUMP JUMPDEST POP PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x157E JUMPI PUSH2 0x157E PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x15AD JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST POP PUSH3 0x186A0 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x15E0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x308440E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH2 0x15EE DUP12 DUP12 DUP12 DUP12 DUP12 DUP12 PUSH2 0x2494 JUMP JUMPDEST PUSH2 0x7D3 DUP12 DUP12 DUP12 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP16 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP15 DUP3 MSTORE SWAP1 SWAP4 POP DUP15 SWAP3 POP DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP13 SWAP3 POP DUP12 SWAP2 POP PUSH2 0x2554 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SUB PUSH2 0x1686 JUMPI PUSH1 0x0 PUSH2 0x16F0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16CC 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 0x16F0 SWAP2 SWAP1 PUSH2 0x2D0C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1720 SWAP2 SWAP1 PUSH2 0x2C4D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x1769 JUMPI PUSH1 0x40 MLOAD PUSH4 0x472511EB PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP2 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP1 MLOAD CALLER SWAP5 SWAP2 SWAP1 SWAP2 AND SWAP3 SWAP2 PUSH32 0x943D69CF2BBE08A9D44B3C4CE6DA17D939D758739370620871CE99A6437866D0 SWAP2 LOG4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x1837 JUMPI PUSH1 0x40 MLOAD PUSH4 0x472511EB PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x186A JUMPI PUSH1 0x40 MLOAD PUSH4 0xC3691307 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP5 DUP9 AND SWAP5 DUP6 OR SWAP1 SSTORE MLOAD PUSH32 0x107CF6EA8668D533DF1AAB5BB8B6315BB0C25F0B6C955558D09368F290668FC7 SWAP2 SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST DUP6 DUP6 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP10 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP9 DUP3 MSTORE SWAP1 SWAP4 POP DUP9 SWAP3 POP DUP8 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP DUP4 MLOAD DUP7 SWAP3 POP PUSH1 0x2 GT ISZERO SWAP1 POP PUSH2 0x1957 JUMPI DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xE8C6265 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0x1986 JUMPI DUP3 MLOAD DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xB34F351D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x448 JUMP JUMPDEST PUSH3 0xF4240 PUSH2 0x1993 DUP4 PUSH2 0x1E55 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x19A7 JUMPI PUSH2 0x585 DUP3 PUSH2 0x1E55 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 NOT ADD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1A73 JUMPI DUP5 DUP2 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x19CD JUMPI PUSH2 0x19CD PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x19F0 JUMPI PUSH2 0x19F0 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x1A22 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAC6BD233 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1A3C JUMPI PUSH2 0x1A3C PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x1A6B JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x19B0 JUMP JUMPDEST POP PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1A8E JUMPI PUSH2 0x1A8E PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x1ABD JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST POP PUSH3 0x186A0 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x1AF0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x308440E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH2 0x1B60 DUP11 DUP11 DUP11 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP15 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP14 DUP3 MSTORE SWAP1 SWAP4 POP DUP14 SWAP3 POP DUP13 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP12 SWAP3 POP PUSH2 0x1E9A SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1BD2 DUP11 DUP11 DUP11 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP15 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP14 DUP3 MSTORE SWAP1 SWAP4 POP DUP14 SWAP3 POP DUP13 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP12 SWAP3 POP DUP11 SWAP2 POP PUSH2 0x2554 SWAP1 POP JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP8 SWAP2 AND CALLER EQ PUSH2 0x1C1F JUMPI PUSH1 0x40 MLOAD PUSH4 0x472511EB PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST DUP6 DUP6 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP10 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP9 DUP3 MSTORE SWAP1 SWAP4 POP DUP9 SWAP3 POP DUP8 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP DUP4 MLOAD DUP7 SWAP3 POP PUSH1 0x2 GT ISZERO SWAP1 POP PUSH2 0x1CAE JUMPI DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xE8C6265 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0x1CDD JUMPI DUP3 MLOAD DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xB34F351D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x448 JUMP JUMPDEST PUSH3 0xF4240 PUSH2 0x1CEA DUP4 PUSH2 0x1E55 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1CFE JUMPI PUSH2 0x585 DUP3 PUSH2 0x1E55 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 NOT ADD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1DCA JUMPI DUP5 DUP2 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x1D24 JUMPI PUSH2 0x1D24 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1D47 JUMPI PUSH2 0x1D47 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x1D79 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAC6BD233 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1D93 JUMPI PUSH2 0x1D93 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x1DC2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1D07 JUMP JUMPDEST POP PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1DE5 JUMPI PUSH2 0x1DE5 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x1E14 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST POP PUSH3 0x186A0 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x1E47 JUMPI PUSH1 0x40 MLOAD PUSH4 0x308440E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH2 0x1BD2 DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH2 0x2494 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E93 JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1E76 JUMPI PUSH2 0x1E76 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x1E89 SWAP2 SWAP1 PUSH2 0x2D25 JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x1E5C JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1EA7 DUP5 DUP5 DUP5 PUSH2 0x219B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP2 EQ PUSH2 0x1EE5 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDD5FF457 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP12 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP1 SWAP3 SWAP1 SWAP2 DUP4 SWAP2 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F56 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 0x1F7A SWAP2 SWAP1 PUSH2 0x2D0C JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1F87 JUMPI PUSH1 0x0 NOT ADD JUMPDEST DUP2 ISZERO PUSH2 0x1F94 JUMPI PUSH1 0x1 DUP3 SUB SWAP2 POP JUMPDEST DUP2 DUP2 ADD SWAP3 POP DUP2 ISZERO PUSH2 0x1FC8 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP5 DUP15 AND DUP5 MSTORE SWAP4 SWAP1 MSTORE SWAP2 SWAP1 KECCAK256 SSTORE JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xB5EE5DC3D2C31A019BBF2C787E0E9C97971C96ACEEA1C38C12FC8FD25C536D46 DUP7 PUSH1 0x40 MLOAD PUSH2 0x2017 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH4 0xFFFFFFFF DUP6 AND ISZERO PUSH2 0x2089 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH3 0xF4240 PUSH4 0xFFFFFFFF DUP10 AND DUP8 MUL DIV SWAP3 DUP4 SWAP3 SWAP1 DUP9 AND PUSH2 0x2062 JUMPI CALLER PUSH2 0x2064 JUMP JUMPDEST DUP8 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE SWAP1 SWAP3 SUB SWAP2 JUMPDEST DUP7 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2125 JUMPI PUSH2 0x20C4 DUP6 DUP10 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x20AC JUMPI PUSH2 0x20AC PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND PUSH3 0xF4240 SWAP2 MUL DIV SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP12 MLOAD SWAP1 SWAP2 SWAP1 DUP13 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x20F3 JUMPI PUSH2 0x20F3 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE PUSH1 0x1 ADD PUSH2 0x208E JUMP JUMPDEST POP POP DUP1 ISZERO PUSH2 0x2190 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3E0F9FFF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP11 AND SWAP1 PUSH4 0x7C1F3FFE SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2177 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x218B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x21B2 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2D4D JUMP JUMPDEST 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 0x0 PUSH2 0x1720 DUP4 DUP4 ADDRESS PUSH1 0x40 MLOAD PUSH19 0x3D605D80600A3D3981F336603057343D52307F PUSH1 0x68 SHL DUP2 MSTORE PUSH32 0x830D2D700A97AF574B186C80D40429385D24241565B08A7C559BA283A964D9B1 PUSH1 0x13 DUP3 ADD MSTORE PUSH19 0x60203DA23D3DF35B3D3D3D3D363D3D37363D73 PUSH1 0x68 SHL PUSH1 0x33 DUP3 ADD MSTORE PUSH1 0x60 SWAP4 DUP5 SHL PUSH1 0x46 DUP3 ADD MSTORE PUSH14 0x5AF43D3D93803E605B57FD5BF3FF PUSH1 0x90 SHL PUSH1 0x5A DUP3 ADD MSTORE SWAP3 SHL PUSH1 0x68 DUP4 ADD MSTORE PUSH1 0x7C DUP3 ADD MSTORE PUSH1 0x67 DUP1 DUP3 KECCAK256 PUSH1 0x9C DUP4 ADD MSTORE PUSH1 0x55 SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x229B SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x2DD2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 SWAP1 SSTORE SWAP1 SWAP2 POP PUSH2 0x22C4 SWAP1 DUP3 PUSH2 0x271A JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP5 DUP8 AND DUP5 MSTORE SWAP4 SWAP1 MSTORE SWAP2 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x22FC SWAP2 PUSH2 0x2DD2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP6 DUP11 AND DUP5 MSTORE SWAP5 SWAP1 MSTORE SWAP3 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP1 SWAP2 POP PUSH2 0x900 SWAP1 DUP5 DUP4 PUSH2 0x2770 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH19 0x3D605D80600A3D3981F336603057343D52307F PUSH1 0x68 SHL DUP2 MSTORE PUSH32 0x830D2D700A97AF574B186C80D40429385D24241565B08A7C559BA283A964D9B1 PUSH1 0x13 DUP3 ADD MSTORE PUSH19 0x60203DA23D3DF35B3D3D3D3D363D3D37363D73 PUSH1 0x68 SHL PUSH1 0x33 DUP3 ADD MSTORE DUP4 PUSH1 0x60 SHL PUSH1 0x46 DUP3 ADD MSTORE PUSH13 0x5AF43D3D93803E605B57FD5BF3 PUSH1 0x98 SHL PUSH1 0x5A DUP3 ADD MSTORE DUP3 PUSH1 0x67 DUP3 PUSH1 0x0 CREATE2 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x900 JUMPI PUSH1 0x40 MLOAD PUSH4 0x380BBE13 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH19 0x3D605D80600A3D3981F336603057343D52307F PUSH1 0x68 SHL DUP2 MSTORE PUSH32 0x830D2D700A97AF574B186C80D40429385D24241565B08A7C559BA283A964D9B1 PUSH1 0x13 DUP3 ADD MSTORE PUSH19 0x60203DA23D3DF35B3D3D3D3D363D3D37363D73 PUSH1 0x68 SHL PUSH1 0x33 DUP3 ADD MSTORE DUP3 PUSH1 0x60 SHL PUSH1 0x46 DUP3 ADD MSTORE PUSH13 0x5AF43D3D93803E605B57FD5BF3 PUSH1 0x98 SHL PUSH1 0x5A DUP3 ADD MSTORE PUSH1 0x67 DUP2 PUSH1 0x0 CREATE SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x22C4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x985DA9B PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2505 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP11 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP10 DUP3 MSTORE SWAP1 SWAP4 POP DUP10 SWAP3 POP DUP9 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP8 SWAP3 POP PUSH2 0x219B SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0x45E1E99513DD915AC128B94953CA64C6375717EA1894B3114DB08CDCA51DEBD2 SWAP2 SWAP1 LOG2 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 BALANCE SWAP1 DUP3 ISZERO PUSH2 0x257D JUMPI PUSH1 0x1 DUP4 SUB SWAP3 POP JUMPDEST POP DUP2 DUP2 ADD DUP3 ISZERO PUSH2 0x25A4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 SWAP1 SSTORE JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x87C3CA0A87D9B82033E4BC55E6D30621F8D7E0C9D8CA7988EDFDE8932787B77B DUP4 PUSH1 0x40 MLOAD PUSH2 0x25E9 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH4 0xFFFFFFFF DUP6 AND ISZERO PUSH2 0x2648 JUMPI PUSH3 0xF4240 PUSH4 0xFFFFFFFF DUP7 AND DUP3 MUL DIV DUP1 PUSH1 0x0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH2 0x2623 JUMPI CALLER PUSH2 0x2625 JUMP JUMPDEST DUP8 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE SWAP1 SUB JUMPDEST DUP7 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x26B2 JUMPI PUSH2 0x266B DUP4 DUP10 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x20AC JUMPI PUSH2 0x20AC PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP12 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2680 JUMPI PUSH2 0x2680 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE PUSH1 0x1 ADD PUSH2 0x264D JUMP JUMPDEST POP POP DUP2 ISZERO PUSH2 0x2710 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AC3AFFD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH4 0xAB0EBFF4 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1369 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 GAS CALL SWAP1 POP DUP1 PUSH2 0x276B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x11551217D514905394D1915497D19052531151 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x448 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE DUP4 PUSH1 0x4 DUP3 ADD MSTORE DUP3 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x0 PUSH1 0x44 DUP4 PUSH1 0x0 DUP10 GAS CALL RETURNDATASIZE ISZERO PUSH1 0x1F RETURNDATASIZE GT PUSH1 0x1 PUSH1 0x0 MLOAD EQ AND OR AND SWAP2 POP POP DUP1 PUSH2 0x27E8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1514905394D1915497D19052531151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x448 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2803 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2818 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1720 DUP2 PUSH2 0x27EE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2835 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x284D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x2868 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x22C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x289F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x28AA DUP2 PUSH2 0x27EE JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x28BA DUP2 PUSH2 0x27EE JUMP JUMPDEST SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x28D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x28E3 DUP13 DUP4 DUP14 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH1 0x60 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x28FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2909 DUP12 DUP3 DUP13 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH2 0x291C SWAP1 POP PUSH1 0x80 DUP11 ADD PUSH2 0x286F JUMP JUMPDEST SWAP2 POP PUSH1 0xA0 DUP10 ADD CALLDATALOAD PUSH2 0x292C DUP2 PUSH2 0x27EE JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2955 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x296D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2979 DUP10 DUP4 DUP11 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2992 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x299F DUP9 DUP3 DUP10 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x29B2 SWAP1 POP PUSH1 0x40 DUP8 ADD PUSH2 0x286F JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x29D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x29DF DUP2 PUSH2 0x27EE JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2A02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2A0E DUP8 DUP3 DUP9 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x2A33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2A4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2A57 DUP11 DUP4 DUP12 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2A70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A7D DUP10 DUP3 DUP11 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH2 0x2A90 SWAP1 POP PUSH1 0x40 DUP9 ADD PUSH2 0x286F JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x2AA0 DUP2 PUSH2 0x27EE JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x2AC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x2AD4 DUP2 PUSH2 0x27EE JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2AF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2AFD DUP12 DUP4 DUP13 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH1 0x40 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2B16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B23 DUP11 DUP3 DUP12 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH2 0x2B36 SWAP1 POP PUSH1 0x60 DUP10 ADD PUSH2 0x286F JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x2B46 DUP2 PUSH2 0x27EE JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2B74 DUP2 PUSH2 0x27EE JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x2B84 DUP2 PUSH2 0x27EE JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x2BA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x2BB3 DUP2 PUSH2 0x27EE JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2BD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2BDC DUP11 DUP4 DUP12 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2BF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C02 DUP10 DUP3 DUP11 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x2C15 SWAP1 POP PUSH1 0x60 DUP9 ADD PUSH2 0x286F JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x2C60 JUMPI PUSH2 0x2C60 PUSH2 0x2C37 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP1 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP6 SWAP1 PUSH1 0x80 DUP5 ADD DUP4 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x2CC7 JUMPI DUP4 CALLDATALOAD PUSH2 0x2CAC DUP2 PUSH2 0x27EE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2C99 JUMP JUMPDEST POP DUP5 DUP2 SUB PUSH1 0x40 DUP7 ADD MSTORE DUP6 MLOAD DUP1 DUP3 MSTORE SWAP1 DUP3 ADD SWAP3 POP DUP2 DUP7 ADD SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2CFD JUMPI DUP3 MLOAD DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2CE1 JUMP JUMPDEST POP SWAP3 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D1E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x2D44 JUMPI PUSH2 0x2D44 PUSH2 0x2C37 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP4 MLOAD PUSH1 0x0 SWAP1 DUP3 SWAP1 PUSH1 0x20 DUP1 DUP9 ADD DUP5 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2D80 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2D5B JUMP JUMPDEST POP POP DUP7 MLOAD DUP2 DUP9 ADD SWAP4 SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2DAF JUMPI DUP5 MLOAD PUSH4 0xFFFFFFFF AND DUP5 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 DUP3 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2D8D JUMP JUMPDEST POP POP POP PUSH1 0xE0 SWAP5 SWAP1 SWAP5 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP5 MSTORE POP POP PUSH1 0x4 SWAP1 SWAP2 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2DE4 JUMPI PUSH2 0x2DE4 PUSH2 0x2C37 JUMP JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLDATASIZE 0x24 DUP13 PUSH2 0x2DEA DUP5 ADDRESS EQ 0xAB PUSH26 0xDEE61A4D70E576E11E62076D81354AF9B8819F4D0164736F6C63 NUMBER STOP ADDMOD 0xE STOP CALLER PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLER PUSH1 0x80 MSTORE PUSH1 0x80 MLOAD PUSH2 0x30F PUSH2 0x4A PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH1 0x4B ADD MSTORE DUP2 DUP2 PUSH1 0xBC ADD MSTORE DUP2 DUP2 PUSH2 0x108 ADD MSTORE DUP2 DUP2 PUSH2 0x13C ADD MSTORE PUSH2 0x186 ADD MSTORE PUSH2 0x30F PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xE769B2B EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0x7C1F3FFE EQ PUSH2 0x89 JUMPI DUP1 PUSH4 0xAB0EBFF4 EQ PUSH2 0x9E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6D PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x9C PUSH2 0x97 CALLDATASIZE PUSH1 0x4 PUSH2 0x288 JUMP JUMPDEST PUSH2 0xB1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9C PUSH2 0xAC CALLDATASIZE PUSH1 0x4 PUSH2 0x2C0 JUMP JUMPDEST PUSH2 0x131 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xF9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x82B429 PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x12D PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH32 0x0 DUP4 PUSH2 0x1AF JUMP JUMPDEST POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x179 JUMPI PUSH1 0x40 MLOAD PUSH3 0x82B429 PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1AC PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP3 PUSH2 0x232 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE DUP4 PUSH1 0x4 DUP3 ADD MSTORE DUP3 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x0 PUSH1 0x44 DUP4 PUSH1 0x0 DUP10 GAS CALL RETURNDATASIZE ISZERO PUSH1 0x1F RETURNDATASIZE GT PUSH1 0x1 PUSH1 0x0 MLOAD EQ AND OR AND SWAP2 POP POP DUP1 PUSH2 0x22C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1514905394D1915497D19052531151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 GAS CALL SWAP1 POP DUP1 PUSH2 0x283 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x11551217D514905394D1915497D19052531151 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x223 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x29B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SIGNEXTEND 0xB8 0xE0 MSIZE TIMESTAMP LOG0 PUSH20 0x94B216A789CE945AF3E46D15AD1F61166D75B0A6 0xBA 0xAF EXTCODESIZE DUP9 0x4E PUSH5 0x736F6C6343 STOP ADDMOD 0xE STOP CALLER ",
              "sourceMap": "12188:28647:2:-:0;;;16197:80;;;;;;;;;;16252:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16221:49:2;;;12188:28647;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@PERCENTAGE_SCALE_552": {
                  "entryPoint": null,
                  "id": 552,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_773": {
                  "entryPoint": null,
                  "id": 773,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_distributeERC20_1796": {
                  "entryPoint": 7916,
                  "id": 1796,
                  "parameterSlots": 6,
                  "returnSlots": 0
                },
                "@_distributeETH_1636": {
                  "entryPoint": 9556,
                  "id": 1636,
                  "parameterSlots": 5,
                  "returnSlots": 0
                },
                "@_getSum_1408": {
                  "entryPoint": 7765,
                  "id": 1408,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_hashSplit_1432": {
                  "entryPoint": 8603,
                  "id": 1432,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@_scaleAmountByPercentage_1808": {
                  "entryPoint": null,
                  "id": 1808,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_updateSplit_1466": {
                  "entryPoint": 9364,
                  "id": 1466,
                  "parameterSlots": 6,
                  "returnSlots": 0
                },
                "@_validSplitHash_1500": {
                  "entryPoint": 7834,
                  "id": 1500,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_withdrawERC20_1874": {
                  "entryPoint": 8905,
                  "id": 1874,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_withdraw_1837": {
                  "entryPoint": 8822,
                  "id": 1837,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@acceptControl_998": {
                  "entryPoint": 5927,
                  "id": 998,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@cancelControlTransfer_963": {
                  "entryPoint": 1035,
                  "id": 963,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@cloneDeterministic_2240": {
                  "entryPoint": 9013,
                  "id": 2240,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@clone_2219": {
                  "entryPoint": 9189,
                  "id": 2219,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@createSplit_846": {
                  "entryPoint": 3302,
                  "id": 846,
                  "parameterSlots": 6,
                  "returnSlots": 1
                },
                "@distributeERC20_1158": {
                  "entryPoint": 1190,
                  "id": 1158,
                  "parameterSlots": 8,
                  "returnSlots": 0
                },
                "@distributeETH_1075": {
                  "entryPoint": 6344,
                  "id": 1075,
                  "parameterSlots": 7,
                  "returnSlots": 0
                },
                "@getController_1303": {
                  "entryPoint": null,
                  "id": 1303,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@getERC20Balance_1374": {
                  "entryPoint": 5728,
                  "id": 1374,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@getETHBalance_1342": {
                  "entryPoint": 2219,
                  "id": 1342,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@getHash_1289": {
                  "entryPoint": null,
                  "id": 1289,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@getNewPotentialController_1317": {
                  "entryPoint": null,
                  "id": 1317,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@makeSplitImmutable_1037": {
                  "entryPoint": 2016,
                  "id": 1037,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@predictDeterministicAddress_2254": {
                  "entryPoint": null,
                  "id": 2254,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@predictDeterministicAddress_2274": {
                  "entryPoint": 8657,
                  "id": 2274,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@predictImmutableSplitAddress_883": {
                  "entryPoint": 2310,
                  "id": 883,
                  "parameterSlots": 5,
                  "returnSlots": 1
                },
                "@safeTransferETH_409": {
                  "entryPoint": 10010,
                  "id": 409,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@safeTransfer_451": {
                  "entryPoint": 10096,
                  "id": 451,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@transferControl_942": {
                  "entryPoint": 6134,
                  "id": 942,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@updateAndDistributeERC20_1203": {
                  "entryPoint": 4206,
                  "id": 1203,
                  "parameterSlots": 8,
                  "returnSlots": 0
                },
                "@updateAndDistributeETH_1116": {
                  "entryPoint": 4983,
                  "id": 1116,
                  "parameterSlots": 7,
                  "returnSlots": 0
                },
                "@updateSplit_914": {
                  "entryPoint": 7134,
                  "id": 914,
                  "parameterSlots": 6,
                  "returnSlots": 0
                },
                "@walletImplementation_560": {
                  "entryPoint": null,
                  "id": 560,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@withdraw_1275": {
                  "entryPoint": 3035,
                  "id": 1275,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "abi_decode_array_address_dyn_calldata": {
                  "entryPoint": 10275,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 10246,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_uint32": {
                  "entryPoint": 11151,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 6
                },
                "abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_uint32t_address": {
                  "entryPoint": 10926,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 7
                },
                "abi_decode_tuple_t_addresst_contract$_ERC20_$387": {
                  "entryPoint": 11094,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_contract$_ERC20_$387t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_uint32t_address": {
                  "entryPoint": 10371,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 8
                },
                "abi_decode_tuple_t_addresst_uint256t_array$_t_contract$_ERC20_$387_$dyn_calldata_ptr": {
                  "entryPoint": 10686,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_uint32": {
                  "entryPoint": 10557,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 5
                },
                "abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_uint32t_address": {
                  "entryPoint": 10778,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 6
                },
                "abi_decode_tuple_t_contract$_ERC20_$387": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256_fromMemory": {
                  "entryPoint": 11532,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_uint32": {
                  "entryPoint": 10351,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint32_$dyn_memory_ptr_t_uint32__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint32_$dyn_memory_ptr_t_uint32__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 11597,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_contract$_ERC20_$387_t_uint256__to_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_8bf8f0d780f13740660fe63233b17f96cb1813889e7dce4121e55b817b367b72__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_d383913ea1996930a2623a0d739b8fc033c734c1d71d4759d3ccba1d3a719c29__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_array$_t_contract$_ERC20_$387_$dyn_calldata_ptr_t_array$_t_uint256_$dyn_memory_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 11387,
                  "id": null,
                  "parameterSlots": 5,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 11341,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_add_t_uint32": {
                  "entryPoint": 11557,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint256": {
                  "entryPoint": 11730,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "panic_error_0x11": {
                  "entryPoint": 11319,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x32": {
                  "entryPoint": 11297,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x41": {
                  "entryPoint": 11365,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "validator_revert_address": {
                  "entryPoint": 10222,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:13398:6",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:6",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "59:86:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "123:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "132:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "135:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "125:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "125:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "82:5:6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "93:5:6"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "108:3:6",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "113:1:6",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "104:3:6"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "104:11:6"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "117:1:6",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "100:3:6"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "100:19:6"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "89:3:6"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "89:31:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "79:2:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "79:42:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "72:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "72:50:6"
                              },
                              "nodeType": "YulIf",
                              "src": "69:70:6"
                            }
                          ]
                        },
                        "name": "validator_revert_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "48:5:6",
                            "type": ""
                          }
                        ],
                        "src": "14:131:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "220:177:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "266:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "275:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "278:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "268:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "268:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "268:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "241:7:6"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "250:9:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "237:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "237:23:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "262:2:6",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "233:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "233:32:6"
                              },
                              "nodeType": "YulIf",
                              "src": "230:52:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "291:36:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "317:9:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "304:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "304:23:6"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "295:5:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "361:5:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "336:24:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "336:31:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "336:31:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "376:15:6",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "386:5:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "376:6:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "186:9:6",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "197:7:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "209:6:6",
                            "type": ""
                          }
                        ],
                        "src": "150:247:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "486:283:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "535:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "544:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "547:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "537:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "537:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "537:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "514:6:6"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "522:4:6",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "510:3:6"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "510:17:6"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "529:3:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "506:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "506:27:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "499:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "499:35:6"
                              },
                              "nodeType": "YulIf",
                              "src": "496:55:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "560:30:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "583:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "570:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "570:20:6"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "560:6:6"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "633:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "642:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "645:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "635:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "635:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "635:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "605:6:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "613:18:6",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "602:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "602:30:6"
                              },
                              "nodeType": "YulIf",
                              "src": "599:50:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "658:29:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "674:6:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "682:4:6",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "670:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "670:17:6"
                              },
                              "variableNames": [
                                {
                                  "name": "arrayPos",
                                  "nodeType": "YulIdentifier",
                                  "src": "658:8:6"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "747:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "756:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "759:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "749:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "749:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "749:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "710:6:6"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "722:1:6",
                                                "type": "",
                                                "value": "5"
                                              },
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "725:6:6"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "718:3:6"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "718:14:6"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "706:3:6"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "706:27:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "735:4:6",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "702:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "702:38:6"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "742:3:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "699:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "699:47:6"
                              },
                              "nodeType": "YulIf",
                              "src": "696:67:6"
                            }
                          ]
                        },
                        "name": "abi_decode_array_address_dyn_calldata",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "449:6:6",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "457:3:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "arrayPos",
                            "nodeType": "YulTypedName",
                            "src": "465:8:6",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "475:6:6",
                            "type": ""
                          }
                        ],
                        "src": "402:367:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "822:115:6",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "832:29:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "854:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "841:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "841:20:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "832:5:6"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "915:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "924:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "927:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "917:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "917:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "917:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "883:5:6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "894:5:6"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "901:10:6",
                                            "type": "",
                                            "value": "0xffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "890:3:6"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "890:22:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "880:2:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "880:33:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "873:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "873:41:6"
                              },
                              "nodeType": "YulIf",
                              "src": "870:61:6"
                            }
                          ]
                        },
                        "name": "abi_decode_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "801:6:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "812:5:6",
                            "type": ""
                          }
                        ],
                        "src": "774:163:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1178:1041:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1225:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1234:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1237:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1227:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1227:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1227:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1199:7:6"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1208:9:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1195:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1195:23:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1220:3:6",
                                    "type": "",
                                    "value": "192"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1191:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1191:33:6"
                              },
                              "nodeType": "YulIf",
                              "src": "1188:53:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1250:36:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1276:9:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1263:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1263:23:6"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1254:5:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1320:5:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1295:24:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1295:31:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1295:31:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1335:15:6",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1345:5:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1335:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1359:47:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1391:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1402:2:6",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1387:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1387:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1374:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1374:32:6"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1363:7:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1440:7:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1415:24:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1415:33:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1415:33:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1457:17:6",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1467:7:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1457:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1483:46:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1514:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1525:2:6",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1510:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1510:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1497:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1497:32:6"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1487:6:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1538:28:6",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1548:18:6",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1542:2:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1593:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1602:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1605:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1595:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1595:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1595:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1581:6:6"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1589:2:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1578:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1578:14:6"
                              },
                              "nodeType": "YulIf",
                              "src": "1575:34:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1618:96:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1686:9:6"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "1697:6:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1682:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1682:22:6"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1706:7:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_array_address_dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "1644:37:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1644:70:6"
                              },
                              "variables": [
                                {
                                  "name": "value2_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1622:8:6",
                                  "type": ""
                                },
                                {
                                  "name": "value3_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1632:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1723:18:6",
                              "value": {
                                "name": "value2_1",
                                "nodeType": "YulIdentifier",
                                "src": "1733:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1723:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1750:18:6",
                              "value": {
                                "name": "value3_1",
                                "nodeType": "YulIdentifier",
                                "src": "1760:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "1750:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1777:48:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1810:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1821:2:6",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1806:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1806:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1793:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1793:32:6"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1781:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1854:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1863:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1866:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1856:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1856:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1856:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1840:8:6"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1850:2:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1837:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1837:16:6"
                              },
                              "nodeType": "YulIf",
                              "src": "1834:36:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1879:98:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1947:9:6"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1958:8:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1943:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1943:24:6"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1969:7:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_array_address_dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "1905:37:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1905:72:6"
                              },
                              "variables": [
                                {
                                  "name": "value4_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1883:8:6",
                                  "type": ""
                                },
                                {
                                  "name": "value5_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1893:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1986:18:6",
                              "value": {
                                "name": "value4_1",
                                "nodeType": "YulIdentifier",
                                "src": "1996:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "1986:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2013:18:6",
                              "value": {
                                "name": "value5_1",
                                "nodeType": "YulIdentifier",
                                "src": "2023:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value5",
                                  "nodeType": "YulIdentifier",
                                  "src": "2013:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2040:48:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2072:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2083:3:6",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2068:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2068:19:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "2050:17:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2050:38:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value6",
                                  "nodeType": "YulIdentifier",
                                  "src": "2040:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2097:48:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2129:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2140:3:6",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2125:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2125:19:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2112:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2112:33:6"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "2101:7:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2179:7:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2154:24:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2154:33:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2154:33:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2196:17:6",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "2206:7:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value7",
                                  "nodeType": "YulIdentifier",
                                  "src": "2196:6:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_contract$_ERC20_$387t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_uint32t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1088:9:6",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1099:7:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1111:6:6",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1119:6:6",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1127:6:6",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "1135:6:6",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "1143:6:6",
                            "type": ""
                          },
                          {
                            "name": "value5",
                            "nodeType": "YulTypedName",
                            "src": "1151:6:6",
                            "type": ""
                          },
                          {
                            "name": "value6",
                            "nodeType": "YulTypedName",
                            "src": "1159:6:6",
                            "type": ""
                          },
                          {
                            "name": "value7",
                            "nodeType": "YulTypedName",
                            "src": "1167:6:6",
                            "type": ""
                          }
                        ],
                        "src": "942:1277:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2325:76:6",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2335:26:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2347:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2358:2:6",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2343:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2343:18:6"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2335:4:6"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2377:9:6"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2388:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2370:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2370:25:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2370:25:6"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2294:9:6",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2305:6:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2316:4:6",
                            "type": ""
                          }
                        ],
                        "src": "2224:177:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2507:76:6",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2517:26:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2529:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2540:2:6",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2525:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2525:18:6"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2517:4:6"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2559:9:6"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2570:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2552:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2552:25:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2552:25:6"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2476:9:6",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2487:6:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2498:4:6",
                            "type": ""
                          }
                        ],
                        "src": "2406:177:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2760:672:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2806:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2815:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2818:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2808:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2808:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2808:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2781:7:6"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2790:9:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2777:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2777:23:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2802:2:6",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2773:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2773:32:6"
                              },
                              "nodeType": "YulIf",
                              "src": "2770:52:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2831:37:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2858:9:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2845:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2845:23:6"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "2835:6:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2877:28:6",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2887:18:6",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2881:2:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2932:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2941:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2944:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2934:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2934:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2934:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2920:6:6"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2928:2:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2917:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2917:14:6"
                              },
                              "nodeType": "YulIf",
                              "src": "2914:34:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2957:96:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3025:9:6"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "3036:6:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3021:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3021:22:6"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "3045:7:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_array_address_dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "2983:37:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2983:70:6"
                              },
                              "variables": [
                                {
                                  "name": "value0_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2961:8:6",
                                  "type": ""
                                },
                                {
                                  "name": "value1_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2971:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3062:18:6",
                              "value": {
                                "name": "value0_1",
                                "nodeType": "YulIdentifier",
                                "src": "3072:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3062:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3089:18:6",
                              "value": {
                                "name": "value1_1",
                                "nodeType": "YulIdentifier",
                                "src": "3099:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3089:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3116:48:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3149:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3160:2:6",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3145:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3145:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3132:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3132:32:6"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3120:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3193:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3202:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3205:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3195:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3195:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3195:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3179:8:6"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3189:2:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3176:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3176:16:6"
                              },
                              "nodeType": "YulIf",
                              "src": "3173:36:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3218:98:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3286:9:6"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3297:8:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3282:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3282:24:6"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "3308:7:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_array_address_dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "3244:37:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3244:72:6"
                              },
                              "variables": [
                                {
                                  "name": "value2_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3222:8:6",
                                  "type": ""
                                },
                                {
                                  "name": "value3_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3232:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3325:18:6",
                              "value": {
                                "name": "value2_1",
                                "nodeType": "YulIdentifier",
                                "src": "3335:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3325:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3352:18:6",
                              "value": {
                                "name": "value3_1",
                                "nodeType": "YulIdentifier",
                                "src": "3362:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "3352:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3379:47:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3411:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3422:2:6",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3407:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3407:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "3389:17:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3389:37:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "3379:6:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2694:9:6",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2705:7:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2717:6:6",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2725:6:6",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2733:6:6",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "2741:6:6",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "2749:6:6",
                            "type": ""
                          }
                        ],
                        "src": "2588:844:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3538:102:6",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "3548:26:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3560:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3571:2:6",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3556:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3556:18:6"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3548:4:6"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3590:9:6"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "3605:6:6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3621:3:6",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3626:1:6",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "3617:3:6"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3617:11:6"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3630:1:6",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "3613:3:6"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3613:19:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "3601:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3601:32:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3583:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3583:51:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3583:51:6"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3507:9:6",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3518:6:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3529:4:6",
                            "type": ""
                          }
                        ],
                        "src": "3437:203:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3797:501:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3843:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3852:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3855:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3845:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3845:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3845:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3818:7:6"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3827:9:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3814:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3814:23:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3839:2:6",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3810:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3810:32:6"
                              },
                              "nodeType": "YulIf",
                              "src": "3807:52:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3868:36:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3894:9:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3881:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3881:23:6"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3872:5:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3938:5:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3913:24:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3913:31:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3913:31:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3953:15:6",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3963:5:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3953:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3977:42:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4004:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4015:2:6",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4000:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4000:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3987:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3987:32:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3977:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4028:46:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4059:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4070:2:6",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4055:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4055:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4042:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4042:32:6"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "4032:6:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4117:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4126:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4129:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4119:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4119:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4119:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "4089:6:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4097:18:6",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4086:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4086:30:6"
                              },
                              "nodeType": "YulIf",
                              "src": "4083:50:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4142:96:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4210:9:6"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "4221:6:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4206:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4206:22:6"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "4230:7:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_array_address_dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "4168:37:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4168:70:6"
                              },
                              "variables": [
                                {
                                  "name": "value2_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4146:8:6",
                                  "type": ""
                                },
                                {
                                  "name": "value3_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4156:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4247:18:6",
                              "value": {
                                "name": "value2_1",
                                "nodeType": "YulIdentifier",
                                "src": "4257:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4247:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4274:18:6",
                              "value": {
                                "name": "value3_1",
                                "nodeType": "YulIdentifier",
                                "src": "4284:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "4274:6:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256t_array$_t_contract$_ERC20_$387_$dyn_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3739:9:6",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3750:7:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3762:6:6",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3770:6:6",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "3778:6:6",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "3786:6:6",
                            "type": ""
                          }
                        ],
                        "src": "3645:653:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4492:791:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4539:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4548:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4551:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4541:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4541:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4541:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4513:7:6"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4522:9:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4509:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4509:23:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4534:3:6",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4505:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4505:33:6"
                              },
                              "nodeType": "YulIf",
                              "src": "4502:53:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4564:37:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4591:9:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4578:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4578:23:6"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "4568:6:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4610:28:6",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4620:18:6",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4614:2:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4665:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4674:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4677:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4667:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4667:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4667:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "4653:6:6"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4661:2:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4650:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4650:14:6"
                              },
                              "nodeType": "YulIf",
                              "src": "4647:34:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4690:96:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4758:9:6"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "4769:6:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4754:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4754:22:6"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "4778:7:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_array_address_dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "4716:37:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4716:70:6"
                              },
                              "variables": [
                                {
                                  "name": "value0_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4694:8:6",
                                  "type": ""
                                },
                                {
                                  "name": "value1_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4704:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4795:18:6",
                              "value": {
                                "name": "value0_1",
                                "nodeType": "YulIdentifier",
                                "src": "4805:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4795:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4822:18:6",
                              "value": {
                                "name": "value1_1",
                                "nodeType": "YulIdentifier",
                                "src": "4832:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4822:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4849:48:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4882:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4893:2:6",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4878:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4878:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4865:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4865:32:6"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4853:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4926:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4935:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4938:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4928:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4928:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4928:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4912:8:6"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4922:2:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4909:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4909:16:6"
                              },
                              "nodeType": "YulIf",
                              "src": "4906:36:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4951:98:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5019:9:6"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5030:8:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5015:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5015:24:6"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "5041:7:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_array_address_dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "4977:37:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4977:72:6"
                              },
                              "variables": [
                                {
                                  "name": "value2_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4955:8:6",
                                  "type": ""
                                },
                                {
                                  "name": "value3_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4965:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5058:18:6",
                              "value": {
                                "name": "value2_1",
                                "nodeType": "YulIdentifier",
                                "src": "5068:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5058:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5085:18:6",
                              "value": {
                                "name": "value3_1",
                                "nodeType": "YulIdentifier",
                                "src": "5095:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "5085:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5112:47:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5144:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5155:2:6",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5140:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5140:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "5122:17:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5122:37:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "5112:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5168:45:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5198:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5209:2:6",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5194:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5194:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5181:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5181:32:6"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "5172:5:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5247:5:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "5222:24:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5222:31:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5222:31:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5262:15:6",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5272:5:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value5",
                                  "nodeType": "YulIdentifier",
                                  "src": "5262:6:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_uint32t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4418:9:6",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4429:7:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4441:6:6",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4449:6:6",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4457:6:6",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "4465:6:6",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "4473:6:6",
                            "type": ""
                          },
                          {
                            "name": "value5",
                            "nodeType": "YulTypedName",
                            "src": "4481:6:6",
                            "type": ""
                          }
                        ],
                        "src": "4303:980:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5494:916:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5541:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5550:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5553:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5543:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5543:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5543:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5515:7:6"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5524:9:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5511:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5511:23:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5536:3:6",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5507:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5507:33:6"
                              },
                              "nodeType": "YulIf",
                              "src": "5504:53:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5566:36:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5592:9:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5579:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5579:23:6"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "5570:5:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5636:5:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "5611:24:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5611:31:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5611:31:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5651:15:6",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5661:5:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5651:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5675:46:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5706:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5717:2:6",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5702:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5702:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5689:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5689:32:6"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "5679:6:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5730:28:6",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5740:18:6",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5734:2:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5785:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5794:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5797:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5787:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5787:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5787:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "5773:6:6"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5781:2:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5770:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5770:14:6"
                              },
                              "nodeType": "YulIf",
                              "src": "5767:34:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5810:96:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5878:9:6"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "5889:6:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5874:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5874:22:6"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "5898:7:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_array_address_dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "5836:37:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5836:70:6"
                              },
                              "variables": [
                                {
                                  "name": "value1_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5814:8:6",
                                  "type": ""
                                },
                                {
                                  "name": "value2_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5824:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5915:18:6",
                              "value": {
                                "name": "value1_1",
                                "nodeType": "YulIdentifier",
                                "src": "5925:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5915:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5942:18:6",
                              "value": {
                                "name": "value2_1",
                                "nodeType": "YulIdentifier",
                                "src": "5952:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5942:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5969:48:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6002:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6013:2:6",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5998:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5998:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5985:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5985:32:6"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5973:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6046:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6055:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6058:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6048:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6048:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6048:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6032:8:6"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6042:2:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6029:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6029:16:6"
                              },
                              "nodeType": "YulIf",
                              "src": "6026:36:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6071:98:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6139:9:6"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "6150:8:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6135:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6135:24:6"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "6161:7:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_array_address_dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "6097:37:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6097:72:6"
                              },
                              "variables": [
                                {
                                  "name": "value3_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6075:8:6",
                                  "type": ""
                                },
                                {
                                  "name": "value4_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6085:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6178:18:6",
                              "value": {
                                "name": "value3_1",
                                "nodeType": "YulIdentifier",
                                "src": "6188:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "6178:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6205:18:6",
                              "value": {
                                "name": "value4_1",
                                "nodeType": "YulIdentifier",
                                "src": "6215:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "6205:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6232:47:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6264:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6275:2:6",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6260:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6260:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "6242:17:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6242:37:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value5",
                                  "nodeType": "YulIdentifier",
                                  "src": "6232:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6288:48:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6320:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6331:3:6",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6316:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6316:19:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6303:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6303:33:6"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6292:7:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6370:7:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "6345:24:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6345:33:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6345:33:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6387:17:6",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "6397:7:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value6",
                                  "nodeType": "YulIdentifier",
                                  "src": "6387:6:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_uint32t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5412:9:6",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5423:7:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5435:6:6",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5443:6:6",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "5451:6:6",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "5459:6:6",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "5467:6:6",
                            "type": ""
                          },
                          {
                            "name": "value5",
                            "nodeType": "YulTypedName",
                            "src": "5475:6:6",
                            "type": ""
                          },
                          {
                            "name": "value6",
                            "nodeType": "YulTypedName",
                            "src": "5483:6:6",
                            "type": ""
                          }
                        ],
                        "src": "5288:1122:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6515:301:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6561:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6570:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6573:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6563:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6563:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6563:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "6536:7:6"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6545:9:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "6532:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6532:23:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6557:2:6",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6528:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6528:32:6"
                              },
                              "nodeType": "YulIf",
                              "src": "6525:52:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6586:36:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6612:9:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6599:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6599:23:6"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "6590:5:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "6656:5:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "6631:24:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6631:31:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6631:31:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6671:15:6",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "6681:5:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "6671:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6695:47:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6727:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6738:2:6",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6723:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6723:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6710:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6710:32:6"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6699:7:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6776:7:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "6751:24:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6751:33:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6751:33:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6793:17:6",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "6803:7:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "6793:6:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_contract$_ERC20_$387",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6473:9:6",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "6484:7:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6496:6:6",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6504:6:6",
                            "type": ""
                          }
                        ],
                        "src": "6415:401:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6908:301:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6954:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6963:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6966:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6956:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6956:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6956:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "6929:7:6"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6938:9:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "6925:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6925:23:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6950:2:6",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6921:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6921:32:6"
                              },
                              "nodeType": "YulIf",
                              "src": "6918:52:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6979:36:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7005:9:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6992:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6992:23:6"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "6983:5:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "7049:5:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "7024:24:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7024:31:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7024:31:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7064:15:6",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "7074:5:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "7064:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7088:47:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7120:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7131:2:6",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7116:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7116:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7103:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7103:32:6"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7092:7:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7169:7:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "7144:24:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7144:33:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7144:33:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7186:17:6",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "7196:7:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "7186:6:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6866:9:6",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "6877:7:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6889:6:6",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6897:6:6",
                            "type": ""
                          }
                        ],
                        "src": "6821:388:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7403:791:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7450:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7459:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7462:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7452:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7452:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7452:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "7424:7:6"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7433:9:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "7420:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7420:23:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7445:3:6",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7416:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7416:33:6"
                              },
                              "nodeType": "YulIf",
                              "src": "7413:53:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7475:36:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7501:9:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7488:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7488:23:6"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "7479:5:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "7545:5:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "7520:24:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7520:31:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7520:31:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7560:15:6",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "7570:5:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "7560:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7584:46:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7615:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7626:2:6",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7611:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7611:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7598:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7598:32:6"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "7588:6:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7639:28:6",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7649:18:6",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7643:2:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7694:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7703:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7706:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7696:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7696:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7696:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "7682:6:6"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7690:2:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7679:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7679:14:6"
                              },
                              "nodeType": "YulIf",
                              "src": "7676:34:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7719:96:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7787:9:6"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "7798:6:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7783:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7783:22:6"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "7807:7:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_array_address_dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "7745:37:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7745:70:6"
                              },
                              "variables": [
                                {
                                  "name": "value1_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7723:8:6",
                                  "type": ""
                                },
                                {
                                  "name": "value2_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7733:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7824:18:6",
                              "value": {
                                "name": "value1_1",
                                "nodeType": "YulIdentifier",
                                "src": "7834:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "7824:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7851:18:6",
                              "value": {
                                "name": "value2_1",
                                "nodeType": "YulIdentifier",
                                "src": "7861:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7851:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7878:48:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7911:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7922:2:6",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7907:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7907:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7894:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7894:32:6"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7882:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7955:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7964:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7967:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7957:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7957:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7957:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7941:8:6"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7951:2:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7938:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7938:16:6"
                              },
                              "nodeType": "YulIf",
                              "src": "7935:36:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7980:98:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8048:9:6"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8059:8:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8044:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8044:24:6"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "8070:7:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_array_address_dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "8006:37:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8006:72:6"
                              },
                              "variables": [
                                {
                                  "name": "value3_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7984:8:6",
                                  "type": ""
                                },
                                {
                                  "name": "value4_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7994:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8087:18:6",
                              "value": {
                                "name": "value3_1",
                                "nodeType": "YulIdentifier",
                                "src": "8097:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "8087:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8114:18:6",
                              "value": {
                                "name": "value4_1",
                                "nodeType": "YulIdentifier",
                                "src": "8124:8:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "8114:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8141:47:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8173:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8184:2:6",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8169:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8169:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "8151:17:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8151:37:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value5",
                                  "nodeType": "YulIdentifier",
                                  "src": "8141:6:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7329:9:6",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "7340:7:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7352:6:6",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7360:6:6",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "7368:6:6",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "7376:6:6",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "7384:6:6",
                            "type": ""
                          },
                          {
                            "name": "value5",
                            "nodeType": "YulTypedName",
                            "src": "7392:6:6",
                            "type": ""
                          }
                        ],
                        "src": "7214:980:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8328:119:6",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8338:26:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8350:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8361:2:6",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8346:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8346:18:6"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8338:4:6"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8380:9:6"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "8391:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8373:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8373:25:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8373:25:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8418:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8429:2:6",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8414:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8414:18:6"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8434:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8407:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8407:34:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8407:34:6"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8289:9:6",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8300:6:6",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8308:6:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8319:4:6",
                            "type": ""
                          }
                        ],
                        "src": "8199:248:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8551:93:6",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8561:26:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8573:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8584:2:6",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8569:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8569:18:6"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8561:4:6"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8603:9:6"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8618:6:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8626:10:6",
                                        "type": "",
                                        "value": "0xffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8614:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8614:23:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8596:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8596:42:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8596:42:6"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8520:9:6",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8531:6:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8542:4:6",
                            "type": ""
                          }
                        ],
                        "src": "8452:192:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8681:95:6",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8698:1:6",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8705:3:6",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8710:10:6",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "8701:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8701:20:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8691:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8691:31:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8691:31:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8738:1:6",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8741:4:6",
                                    "type": "",
                                    "value": "0x32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8731:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8731:15:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8731:15:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8762:1:6",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8765:4:6",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "8755:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8755:15:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8755:15:6"
                            }
                          ]
                        },
                        "name": "panic_error_0x32",
                        "nodeType": "YulFunctionDefinition",
                        "src": "8649:127:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8813:95:6",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8830:1:6",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8837:3:6",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8842:10:6",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "8833:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8833:20:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8823:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8823:31:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8823:31:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8870:1:6",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8873:4:6",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8863:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8863:15:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8863:15:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8894:1:6",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8897:4:6",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "8887:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8887:15:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8887:15:6"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "8781:127:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8961:80:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8988:22:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "8990:16:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8990:18:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8990:18:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "8977:1:6"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "8984:1:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "8980:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8980:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8974:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8974:13:6"
                              },
                              "nodeType": "YulIf",
                              "src": "8971:39:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9019:16:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "9030:1:6"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9033:1:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9026:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9026:9:6"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "9019:3:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "8944:1:6",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "8947:1:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "8953:3:6",
                            "type": ""
                          }
                        ],
                        "src": "8913:128:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9078:95:6",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9095:1:6",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9102:3:6",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9107:10:6",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "9098:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9098:20:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9088:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9088:31:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9088:31:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9135:1:6",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9138:4:6",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9128:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9128:15:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9128:15:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9159:1:6",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9162:4:6",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "9152:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9152:15:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9152:15:6"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "9046:127:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9261:177:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9307:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9316:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9319:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9309:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9309:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9309:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "9282:7:6"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9291:9:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "9278:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9278:23:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9303:2:6",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9274:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9274:32:6"
                              },
                              "nodeType": "YulIf",
                              "src": "9271:52:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9332:36:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9358:9:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9345:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9345:23:6"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "9336:5:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "9402:5:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "9377:24:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9377:31:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9377:31:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9417:15:6",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "9427:5:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "9417:6:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_contract$_ERC20_$387",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9227:9:6",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "9238:7:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9250:6:6",
                            "type": ""
                          }
                        ],
                        "src": "9178:260:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9723:1022:6",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9733:32:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9751:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9762:2:6",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9747:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9747:18:6"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9737:6:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9781:9:6"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9792:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9774:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9774:25:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9774:25:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9808:12:6",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9818:2:6",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9812:2:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9840:9:6"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9851:2:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9836:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9836:18:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9856:2:6",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9829:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9829:30:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9829:30:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9868:17:6",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "9879:6:6"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "9872:3:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9901:6:6"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "9909:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9894:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9894:22:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9894:22:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9925:26:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9936:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9947:3:6",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9932:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9932:19:6"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "9925:3:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9960:20:6",
                              "value": {
                                "name": "value1",
                                "nodeType": "YulIdentifier",
                                "src": "9974:6:6"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "9964:6:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9989:10:6",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9998:1:6",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "9993:1:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10057:228:6",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "10071:33:6",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "10097:6:6"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "calldataload",
                                        "nodeType": "YulIdentifier",
                                        "src": "10084:12:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10084:20:6"
                                    },
                                    "variables": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulTypedName",
                                        "src": "10075:5:6",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "10142:5:6"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "validator_revert_address",
                                        "nodeType": "YulIdentifier",
                                        "src": "10117:24:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10117:31:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10117:31:6"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "10168:3:6"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "name": "value",
                                              "nodeType": "YulIdentifier",
                                              "src": "10177:5:6"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "10192:3:6",
                                                      "type": "",
                                                      "value": "160"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "10197:1:6",
                                                      "type": "",
                                                      "value": "1"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "10188:3:6"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "10188:11:6"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "10201:1:6",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "10184:3:6"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "10184:19:6"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "10173:3:6"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "10173:31:6"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "10161:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10161:44:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10161:44:6"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "10218:19:6",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "10229:3:6"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "10234:2:6"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "10225:3:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10225:12:6"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "10218:3:6"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "10250:25:6",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "10264:6:6"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "10272:2:6"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "10260:3:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10260:15:6"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "10250:6:6"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "10019:1:6"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "10022:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10016:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10016:13:6"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "10030:18:6",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "10032:14:6",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "10041:1:6"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10044:1:6",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "10037:3:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10037:9:6"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "10032:1:6"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "10012:3:6",
                                "statements": []
                              },
                              "src": "10008:277:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10305:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10316:2:6",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10301:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10301:18:6"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "10325:3:6"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10330:9:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "10321:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10321:19:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10294:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10294:47:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10294:47:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10350:16:6",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "10363:3:6"
                              },
                              "variables": [
                                {
                                  "name": "pos_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10354:5:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10375:27:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "10395:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "10389:5:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10389:13:6"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "10379:6:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "10418:3:6"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "10423:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10411:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10411:19:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10411:19:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10439:21:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "10452:3:6"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10457:2:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10448:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10448:12:6"
                              },
                              "variableNames": [
                                {
                                  "name": "pos_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "10439:5:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10469:31:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "10489:6:6"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10497:2:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10485:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10485:15:6"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10473:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10509:12:6",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10520:1:6",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10513:3:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10585:132:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "10606:5:6"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "name": "srcPtr_1",
                                              "nodeType": "YulIdentifier",
                                              "src": "10619:8:6"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "10613:5:6"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "10613:15:6"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "10599:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10599:30:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10599:30:6"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "10642:23:6",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "10655:5:6"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "10662:2:6"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "10651:3:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10651:14:6"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10642:5:6"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "10678:29:6",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "10694:8:6"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "10704:2:6"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "10690:3:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10690:17:6"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10678:8:6"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10541:3:6"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "10546:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10538:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10538:15:6"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "10554:22:6",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "10556:18:6",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "10567:3:6"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10572:1:6",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "10563:3:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10563:11:6"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10556:3:6"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "10534:3:6",
                                "statements": []
                              },
                              "src": "10530:187:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10726:13:6",
                              "value": {
                                "name": "pos_1",
                                "nodeType": "YulIdentifier",
                                "src": "10734:5:6"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10726:4:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_array$_t_contract$_ERC20_$387_$dyn_calldata_ptr_t_array$_t_uint256_$dyn_memory_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9668:9:6",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "9679:6:6",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "9687:6:6",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "9695:6:6",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9703:6:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9714:4:6",
                            "type": ""
                          }
                        ],
                        "src": "9443:1302:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10831:103:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10877:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10886:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10889:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10879:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10879:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10879:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "10852:7:6"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10861:9:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "10848:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10848:23:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10873:2:6",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10844:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10844:32:6"
                              },
                              "nodeType": "YulIf",
                              "src": "10841:52:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10902:26:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10918:9:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "10912:5:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10912:16:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "10902:6:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10797:9:6",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "10808:7:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10820:6:6",
                            "type": ""
                          }
                        ],
                        "src": "10750:184:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10986:181:6",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10996:20:6",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11006:10:6",
                                "type": "",
                                "value": "0xffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11000:2:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11025:21:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "11040:1:6"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11043:2:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "11036:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11036:10:6"
                              },
                              "variables": [
                                {
                                  "name": "x_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11029:3:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11055:21:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11070:1:6"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11073:2:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "11066:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11066:10:6"
                              },
                              "variables": [
                                {
                                  "name": "y_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11059:3:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11110:22:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "11112:16:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11112:18:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11112:18:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11091:3:6"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "11100:2:6"
                                      },
                                      {
                                        "name": "y_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "11104:3:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "11096:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11096:12:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11088:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11088:21:6"
                              },
                              "nodeType": "YulIf",
                              "src": "11085:47:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11141:20:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11152:3:6"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11157:3:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11148:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11148:13:6"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "11141:3:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "10969:1:6",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "10972:1:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "10978:3:6",
                            "type": ""
                          }
                        ],
                        "src": "10939:228:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11314:145:6",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "11324:26:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11336:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11347:2:6",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11332:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11332:18:6"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11324:4:6"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11366:9:6"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "11381:6:6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "11397:3:6",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "11402:1:6",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "11393:3:6"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "11393:11:6"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "11406:1:6",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "11389:3:6"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11389:19:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "11377:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11377:32:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11359:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11359:51:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11359:51:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11430:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11441:2:6",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11426:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11426:18:6"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11446:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11419:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11419:34:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11419:34:6"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_contract$_ERC20_$387_t_uint256__to_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11275:9:6",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "11286:6:6",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11294:6:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11305:4:6",
                            "type": ""
                          }
                        ],
                        "src": "11172:287:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11735:839:6",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11745:16:6",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "11758:3:6"
                              },
                              "variables": [
                                {
                                  "name": "pos_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11749:5:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11770:27:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "11790:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "11784:5:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11784:13:6"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "11774:6:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11806:12:6",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "11815:3:6"
                              },
                              "variableNames": [
                                {
                                  "name": "pos_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "11806:5:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11827:14:6",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11837:4:6",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11831:2:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11850:29:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "11868:6:6"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11876:2:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11864:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11864:15:6"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "11854:6:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11888:10:6",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11897:1:6",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "11892:1:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11956:152:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "11977:5:6"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11994:6:6"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "11988:5:6"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "11988:13:6"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "12011:3:6",
                                                      "type": "",
                                                      "value": "160"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "12016:1:6",
                                                      "type": "",
                                                      "value": "1"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "12007:3:6"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "12007:11:6"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "12020:1:6",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "12003:3:6"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "12003:19:6"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "11984:3:6"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11984:39:6"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "11970:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11970:54:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11970:54:6"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "12037:23:6",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "12050:5:6"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "12057:2:6"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "12046:3:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12046:14:6"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "12037:5:6"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "12073:25:6",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "12087:6:6"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "12095:2:6"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "12083:3:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12083:15:6"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12073:6:6"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "11918:1:6"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "11921:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11915:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11915:13:6"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "11929:18:6",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "11931:14:6",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "11940:1:6"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11943:1:6",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "11936:3:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11936:9:6"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "11931:1:6"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "11911:3:6",
                                "statements": []
                              },
                              "src": "11907:201:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "12117:18:6",
                              "value": {
                                "name": "pos_1",
                                "nodeType": "YulIdentifier",
                                "src": "12130:5:6"
                              },
                              "variables": [
                                {
                                  "name": "pos_2",
                                  "nodeType": "YulTypedName",
                                  "src": "12121:5:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "12144:29:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "12166:6:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "12160:5:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12160:13:6"
                              },
                              "variables": [
                                {
                                  "name": "length_1",
                                  "nodeType": "YulTypedName",
                                  "src": "12148:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12182:14:6",
                              "value": {
                                "name": "pos_1",
                                "nodeType": "YulIdentifier",
                                "src": "12191:5:6"
                              },
                              "variableNames": [
                                {
                                  "name": "pos_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "12182:5:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "12205:31:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "12225:6:6"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "12233:2:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12221:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12221:15:6"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr_1",
                                  "nodeType": "YulTypedName",
                                  "src": "12209:8:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "12245:12:6",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "12256:1:6",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i_1",
                                  "nodeType": "YulTypedName",
                                  "src": "12249:3:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12323:149:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "12344:5:6"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr_1",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12361:8:6"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "12355:5:6"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "12355:15:6"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "12372:10:6",
                                              "type": "",
                                              "value": "0xffffffff"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "12351:3:6"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "12351:32:6"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "12337:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12337:47:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12337:47:6"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "12397:23:6",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "12410:5:6"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "12417:2:6"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "12406:3:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12406:14:6"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "12397:5:6"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "12433:29:6",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "12449:8:6"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "12459:2:6"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "12445:3:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12445:17:6"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "12433:8:6"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "12277:3:6"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "12282:8:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "12274:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12274:17:6"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "12292:22:6",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "12294:18:6",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "12305:3:6"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "12310:1:6",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "12301:3:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12301:11:6"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "12294:3:6"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "12270:3:6",
                                "statements": []
                              },
                              "src": "12266:206:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "12488:5:6"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12503:3:6",
                                            "type": "",
                                            "value": "224"
                                          },
                                          {
                                            "name": "value2",
                                            "nodeType": "YulIdentifier",
                                            "src": "12508:6:6"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "12499:3:6"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12499:16:6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12521:3:6",
                                            "type": "",
                                            "value": "224"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12526:10:6",
                                            "type": "",
                                            "value": "0xffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "12517:3:6"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12517:20:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "12495:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12495:43:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12481:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12481:58:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12481:58:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12548:20:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "12559:5:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12566:1:6",
                                    "type": "",
                                    "value": "4"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12555:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12555:13:6"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "12548:3:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint32_$dyn_memory_ptr_t_uint32__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint32_$dyn_memory_ptr_t_uint32__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "11695:3:6",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "11700:6:6",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "11708:6:6",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11716:6:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "11727:3:6",
                            "type": ""
                          }
                        ],
                        "src": "11464:1110:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12628:76:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12650:22:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "12652:16:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12652:18:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12652:18:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "12644:1:6"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "12647:1:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "12641:2:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12641:8:6"
                              },
                              "nodeType": "YulIf",
                              "src": "12638:34:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12681:17:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "12693:1:6"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "12696:1:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "12689:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12689:9:6"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "12681:4:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "12610:1:6",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "12613:1:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "12619:4:6",
                            "type": ""
                          }
                        ],
                        "src": "12579:125:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12883:169:6",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12900:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12911:2:6",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12893:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12893:21:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12893:21:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12934:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12945:2:6",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12930:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12930:18:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12950:2:6",
                                    "type": "",
                                    "value": "19"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12923:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12923:30:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12923:30:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12973:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12984:2:6",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12969:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12969:18:6"
                                  },
                                  {
                                    "hexValue": "4554485f5452414e534645525f4641494c4544",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "12989:21:6",
                                    "type": "",
                                    "value": "ETH_TRANSFER_FAILED"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12962:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12962:49:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12962:49:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13020:26:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13032:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13043:2:6",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13028:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13028:18:6"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "13020:4:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_d383913ea1996930a2623a0d739b8fc033c734c1d71d4759d3ccba1d3a719c29__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "12860:9:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "12874:4:6",
                            "type": ""
                          }
                        ],
                        "src": "12709:343:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13231:165:6",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13248:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13259:2:6",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13241:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13241:21:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13241:21:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13282:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13293:2:6",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13278:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13278:18:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13298:2:6",
                                    "type": "",
                                    "value": "15"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13271:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13271:30:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13271:30:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13321:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13332:2:6",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13317:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13317:18:6"
                                  },
                                  {
                                    "hexValue": "5452414e534645525f4641494c4544",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "13337:17:6",
                                    "type": "",
                                    "value": "TRANSFER_FAILED"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13310:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13310:45:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13310:45:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13364:26:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13376:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13387:2:6",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13372:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13372:18:6"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "13364:4:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_8bf8f0d780f13740660fe63233b17f96cb1813889e7dce4121e55b817b367b72__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "13208:9:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "13222:4:6",
                            "type": ""
                          }
                        ],
                        "src": "13057:339:6"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_contract$_ERC20_$387t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_uint32t_address(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let offset := calldataload(add(headStart, 64))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n        let offset_1 := calldataload(add(headStart, 96))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value4_1, value5_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value4 := value4_1\n        value5 := value5_1\n        value6 := abi_decode_uint32(add(headStart, 128))\n        let value_2 := calldataload(add(headStart, 160))\n        validator_revert_address(value_2)\n        value7 := value_2\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\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_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_uint32(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_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(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n        value4 := abi_decode_uint32(add(headStart, 64))\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, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_array$_t_contract$_ERC20_$387_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_uint32t_address(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_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(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n        value4 := abi_decode_uint32(add(headStart, 64))\n        let value := calldataload(add(headStart, 96))\n        validator_revert_address(value)\n        value5 := value\n    }\n    function abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_uint32t_address(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n        value5 := abi_decode_uint32(add(headStart, 96))\n        let value_1 := calldataload(add(headStart, 128))\n        validator_revert_address(value_1)\n        value6 := value_1\n    }\n    function abi_decode_tuple_t_addresst_contract$_ERC20_$387(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_uint32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n        value5 := abi_decode_uint32(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_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_contract$_ERC20_$387(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_array$_t_contract$_ERC20_$387_$dyn_calldata_ptr_t_array$_t_uint256_$dyn_memory_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 96)\n        mstore(headStart, value0)\n        let _1 := 32\n        mstore(add(headStart, _1), 96)\n        let pos := tail_1\n        mstore(tail_1, value2)\n        pos := add(headStart, 128)\n        let srcPtr := value1\n        let i := 0\n        for { } lt(i, value2) { i := add(i, 1) }\n        {\n            let value := calldataload(srcPtr)\n            validator_revert_address(value)\n            mstore(pos, and(value, sub(shl(160, 1), 1)))\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 := mload(value3)\n        mstore(pos, length)\n        pos_1 := add(pos, _1)\n        let srcPtr_1 := add(value3, _1)\n        let i_1 := 0\n        for { } lt(i_1, length) { i_1 := add(i_1, 1) }\n        {\n            mstore(pos_1, mload(srcPtr_1))\n            pos_1 := add(pos_1, _1)\n            srcPtr_1 := add(srcPtr_1, _1)\n        }\n        tail := pos_1\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function checked_add_t_uint32(x, y) -> sum\n    {\n        let _1 := 0xffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_contract$_ERC20_$387_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_packed_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint32_$dyn_memory_ptr_t_uint32__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint32_$dyn_memory_ptr_t_uint32__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n    {\n        let pos_1 := pos\n        let length := mload(value0)\n        pos_1 := pos\n        let _1 := 0x20\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos_1, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos_1 := add(pos_1, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        let pos_2 := pos_1\n        let length_1 := mload(value1)\n        pos_2 := pos_1\n        let srcPtr_1 := add(value1, _1)\n        let i_1 := 0\n        for { } lt(i_1, length_1) { i_1 := add(i_1, 1) }\n        {\n            mstore(pos_2, and(mload(srcPtr_1), 0xffffffff))\n            pos_2 := add(pos_2, _1)\n            srcPtr_1 := add(srcPtr_1, _1)\n        }\n        mstore(pos_2, and(shl(224, value2), shl(224, 0xffffffff)))\n        end := add(pos_2, 4)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_d383913ea1996930a2623a0d739b8fc033c734c1d71d4759d3ccba1d3a719c29__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), \"ETH_TRANSFER_FAILED\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_8bf8f0d780f13740660fe63233b17f96cb1813889e7dce4121e55b817b367b72__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"TRANSFER_FAILED\")\n        tail := add(headStart, 96)\n    }\n}",
                  "id": 6,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {
                "560": [
                  {
                    "length": 32,
                    "start": 688
                  },
                  {
                    "length": 32,
                    "start": 2984
                  },
                  {
                    "length": 32,
                    "start": 3990
                  },
                  {
                    "length": 32,
                    "start": 4039
                  }
                ]
              },
              "linkReferences": {},
              "object": "6080604052600436106101185760003560e01c806377b1e4e9116100a0578063c7de644011610064578063c7de64401461034e578063d0e4b2f41461036e578063e10e51d61461038e578063e61cb05e146103cb578063ecef0ace146103eb57600080fd5b806377b1e4e91461027e5780638117abc11461029e57806388c662aa146102d2578063a5e3909e1461030e578063c3a8962c1461032e57600080fd5b80633bb66a7b116100e75780633bb66a7b146101cf5780633f26479e146101ef57806352844dd3146102065780636e5f69191461023e5780637601f7821461025e57600080fd5b80631267c6da146101245780631581130214610146578063189cbaa0146101665780631da0b8fc1461018657600080fd5b3661011f57005b600080fd5b34801561013057600080fd5b5061014461013f366004612806565b61040b565b005b34801561015257600080fd5b50610144610161366004612883565b6104a6565b34801561017257600080fd5b50610144610181366004612806565b6107e0565b34801561019257600080fd5b506101bc6101a1366004612806565b6001600160a01b031660009081526002602052604090205490565b6040519081526020015b60405180910390f35b3480156101db57600080fd5b506101bc6101ea366004612806565b6108ab565b3480156101fb57600080fd5b506101bc620f424081565b34801561021257600080fd5b5061022661022136600461293d565b610906565b6040516001600160a01b0390911681526020016101c6565b34801561024a57600080fd5b506101446102593660046129be565b610bdb565b34801561026a57600080fd5b50610226610279366004612a1a565b610ce6565b34801561028a57600080fd5b50610144610299366004612883565b61106e565b3480156102aa57600080fd5b506102267f000000000000000000000000000000000000000000000000000000000000000081565b3480156102de57600080fd5b506102266102ed366004612806565b6001600160a01b039081166000908152600260205260409020600101541690565b34801561031a57600080fd5b50610144610329366004612aae565b611377565b34801561033a57600080fd5b506101bc610349366004612b56565b611660565b34801561035a57600080fd5b50610144610369366004612806565b611727565b34801561037a57600080fd5b50610144610389366004612b56565b6117f6565b34801561039a57600080fd5b506102266103a9366004612806565b6001600160a01b03908116600090815260026020819052604090912001541690565b3480156103d757600080fd5b506101446103e6366004612aae565b6118c8565b3480156103f757600080fd5b50610144610406366004612b8f565b611bde565b6001600160a01b0381811660009081526002602052604090206001015482911633146104515760405163472511eb60e11b81523360048201526024015b60405180910390fd5b6001600160a01b038216600081815260026020819052604080832090910180546001600160a01b0319169055517f6c2460a415b84be3720c209fe02f2cad7a6bcba21e8637afe8957b7ec4b6ef879190a25050565b85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092019190915250508351869250600211159050610535578251604051630e8c626560e41b815260040161044891815260200190565b8151835114610564578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f424061057183611e55565b63ffffffff16146105a75761058582611e55565b60405163fcc487c160e01b815263ffffffff9091166004820152602401610448565b82516000190160005b81811015610673578481600101815181106105cd576105cd612c21565b60200260200101516001600160a01b03168582815181106105f0576105f0612c21565b60200260200101516001600160a01b0316106106225760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff1684828151811061063c5761063c612c21565b602002602001015163ffffffff160361066b57604051630db7e4c760e01b815260048101829052602401610448565b6001016105b0565b50600063ffffffff1683828151811061068e5761068e612c21565b602002602001015163ffffffff16036106bd57604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff1611156106f05760405163308440e360e21b815263ffffffff82166004820152602401610448565b6107608b8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611e9a915050565b6107d38b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c92508b9150611eec9050565b5050505050505050505050565b6001600160a01b0381811660009081526002602052604090206001015482911633146108215760405163472511eb60e11b8152336004820152602401610448565b6001600160a01b03808316600081815260026020819052604080832091820180546001600160a01b0319169055600190910154905191931691907f943d69cf2bbe08a9d44b3c4ce6da17d939d758739370620871ce99a6437866d0908490a4506001600160a01b0316600090815260026020526040902060010180546001600160a01b0319169055565b6001600160a01b03811660009081526002602052604081205481036108d15760006108dd565b816001600160a01b0316315b6001600160a01b0383166000908152602081905260409020546109009190612c4d565b92915050565b600085858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092019190915250508351869250600211159050610997578251604051630e8c626560e41b815260040161044891815260200190565b81518351146109c6578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f42406109d383611e55565b63ffffffff16146109e75761058582611e55565b82516000190160005b81811015610ab357848160010181518110610a0d57610a0d612c21565b60200260200101516001600160a01b0316858281518110610a3057610a30612c21565b60200260200101516001600160a01b031610610a625760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff16848281518110610a7c57610a7c612c21565b602002602001015163ffffffff1603610aab57604051630db7e4c760e01b815260048101829052602401610448565b6001016109f0565b50600063ffffffff16838281518110610ace57610ace612c21565b602002602001015163ffffffff1603610afd57604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff161115610b305760405163308440e360e21b815263ffffffff82166004820152602401610448565b6000610ba18a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b925061219b915050565b9050610bcd7f0000000000000000000000000000000000000000000000000000000000000000826121d1565b9a9950505050505050505050565b60008167ffffffffffffffff811115610bf657610bf6612c65565b604051908082528060200260200182016040528015610c1f578160200160208202803683370190505b50905060008415610c3657610c3386612276565b90505b60005b83811015610c9657610c7187868684818110610c5757610c57612c21565b9050602002016020810190610c6c9190612806565b6122c9565b838281518110610c8357610c83612c21565b6020908102919091010152600101610c39565b50856001600160a01b03167fa9e30bf144f83390a4fe47562a4e16892108102221c674ff538da0b72a83d17482868686604051610cd69493929190612c7b565b60405180910390a2505050505050565b600086868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a02828101820190935289825290935089925088918291850190849080828437600092019190915250508351879250600211159050610d77578251604051630e8c626560e41b815260040161044891815260200190565b8151835114610da6578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f4240610db383611e55565b63ffffffff1614610dc75761058582611e55565b82516000190160005b81811015610e9357848160010181518110610ded57610ded612c21565b60200260200101516001600160a01b0316858281518110610e1057610e10612c21565b60200260200101516001600160a01b031610610e425760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff16848281518110610e5c57610e5c612c21565b602002602001015163ffffffff1603610e8b57604051630db7e4c760e01b815260048101829052602401610448565b600101610dd0565b50600063ffffffff16838281518110610eae57610eae612c21565b602002602001015163ffffffff1603610edd57604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff161115610f105760405163308440e360e21b815263ffffffff82166004820152602401610448565b6000610f818b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c925061219b915050565b90506001600160a01b038616610fc257610fbb7f000000000000000000000000000000000000000000000000000000000000000082612335565b945061101f565b610feb7f00000000000000000000000000000000000000000000000000000000000000006123e5565b6001600160a01b03818116600090815260026020526040902060010180546001600160a01b03191691891691909117905594505b6001600160a01b038516600081815260026020526040808220849055517f8d5f9943c664a3edaf4d3eb18cc5e2c45a7d2dc5869be33d33bbc0fff9bc25909190a2505050509695505050505050565b6001600160a01b0388811660009081526002602052604090206001015489911633146110af5760405163472511eb60e11b8152336004820152602401610448565b86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a0282810182019093528982529093508992508891829185019084908082843760009201919091525050835187925060021115905061113e578251604051630e8c626560e41b815260040161044891815260200190565b815183511461116d578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f424061117a83611e55565b63ffffffff161461118e5761058582611e55565b82516000190160005b8181101561125a578481600101815181106111b4576111b4612c21565b60200260200101516001600160a01b03168582815181106111d7576111d7612c21565b60200260200101516001600160a01b0316106112095760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff1684828151811061122357611223612c21565b602002602001015163ffffffff160361125257604051630db7e4c760e01b815260048101829052602401610448565b600101611197565b50600063ffffffff1683828151811061127557611275612c21565b602002602001015163ffffffff16036112a457604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff1611156112d75760405163308440e360e21b815263ffffffff82166004820152602401610448565b6112e58c8b8b8b8b8b612494565b6113698c8c8c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508d92508c9150611eec9050565b505050505050505050505050565b6001600160a01b0387811660009081526002602052604090206001015488911633146113b85760405163472511eb60e11b8152336004820152602401610448565b86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a02828101820190935289825290935089925088918291850190849080828437600092019190915250508351879250600211159050611447578251604051630e8c626560e41b815260040161044891815260200190565b8151835114611476578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f424061148383611e55565b63ffffffff16146114975761058582611e55565b82516000190160005b81811015611563578481600101815181106114bd576114bd612c21565b60200260200101516001600160a01b03168582815181106114e0576114e0612c21565b60200260200101516001600160a01b0316106115125760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff1684828151811061152c5761152c612c21565b602002602001015163ffffffff160361155b57604051630db7e4c760e01b815260048101829052602401610448565b6001016114a0565b50600063ffffffff1683828151811061157e5761157e612c21565b602002602001015163ffffffff16036115ad57604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff1611156115e05760405163308440e360e21b815263ffffffff82166004820152602401610448565b6115ee8b8b8b8b8b8b612494565b6107d38b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c92508b91506125549050565b6001600160a01b03821660009081526002602052604081205481036116865760006116f0565b6040516370a0823160e01b81526001600160a01b0384811660048301528316906370a0823190602401602060405180830381865afa1580156116cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f09190612d0c565b6001600160a01b038084166000908152600160209081526040808320938816835292905220546117209190612c4d565b9392505050565b6001600160a01b038181166000908152600260208190526040909120015482911633146117695760405163472511eb60e11b8152336004820152602401610448565b6001600160a01b03808316600081815260026020819052604080832091820180546001600160a01b0319169055600190910154905133949190911692917f943d69cf2bbe08a9d44b3c4ce6da17d939d758739370620871ce99a6437866d091a4506001600160a01b0316600090815260026020526040902060010180546001600160a01b03191633179055565b6001600160a01b0382811660009081526002602052604090206001015483911633146118375760405163472511eb60e11b8152336004820152602401610448565b816001600160a01b03811661186a5760405163c369130760e01b81526001600160a01b0382166004820152602401610448565b6001600160a01b03848116600081815260026020819052604080832090910180546001600160a01b0319169488169485179055517f107cf6ea8668d533df1aab5bb8b6315bb0c25f0b6c955558d09368f290668fc79190a350505050565b85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092019190915250508351869250600211159050611957578251604051630e8c626560e41b815260040161044891815260200190565b8151835114611986578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f424061199383611e55565b63ffffffff16146119a75761058582611e55565b82516000190160005b81811015611a73578481600101815181106119cd576119cd612c21565b60200260200101516001600160a01b03168582815181106119f0576119f0612c21565b60200260200101516001600160a01b031610611a225760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff16848281518110611a3c57611a3c612c21565b602002602001015163ffffffff1603611a6b57604051630db7e4c760e01b815260048101829052602401610448565b6001016119b0565b50600063ffffffff16838281518110611a8e57611a8e612c21565b602002602001015163ffffffff1603611abd57604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff161115611af05760405163308440e360e21b815263ffffffff82166004820152602401610448565b611b608a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611e9a915050565b611bd28a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b92508a91506125549050565b50505050505050505050565b6001600160a01b038681166000908152600260205260409020600101548791163314611c1f5760405163472511eb60e11b8152336004820152602401610448565b85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092019190915250508351869250600211159050611cae578251604051630e8c626560e41b815260040161044891815260200190565b8151835114611cdd578251825160405163b34f351d60e01b815260048101929092526024820152604401610448565b620f4240611cea83611e55565b63ffffffff1614611cfe5761058582611e55565b82516000190160005b81811015611dca57848160010181518110611d2457611d24612c21565b60200260200101516001600160a01b0316858281518110611d4757611d47612c21565b60200260200101516001600160a01b031610611d795760405163ac6bd23360e01b815260048101829052602401610448565b600063ffffffff16848281518110611d9357611d93612c21565b602002602001015163ffffffff1603611dc257604051630db7e4c760e01b815260048101829052602401610448565b600101611d07565b50600063ffffffff16838281518110611de557611de5612c21565b602002602001015163ffffffff1603611e1457604051630db7e4c760e01b815260048101829052602401610448565b50620186a08163ffffffff161115611e475760405163308440e360e21b815263ffffffff82166004820152602401610448565b611bd28a8a8a8a8a8a612494565b8051600090815b81811015611e9357838181518110611e7657611e76612c21565b602002602001015183611e899190612d25565b9250600101611e5c565b5050919050565b6000611ea784848461219b565b6001600160a01b0386166000908152600260205260409020549091508114611ee55760405163dd5ff45760e01b815260048101829052602401610448565b5050505050565b6001600160a01b038581166000818152600160209081526040808320948b16808452949091528082205490516370a0823160e01b815260048101949094529092909183916370a0823190602401602060405180830381865afa158015611f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7a9190612d0c565b90508015611f8757600019015b8115611f94576001820391505b81810192508115611fc8576001600160a01b038089166000908152600160208181526040808420948e168452939052919020555b836001600160a01b0316886001600160a01b03168a6001600160a01b03167fb5ee5dc3d2c31a019bbf2c787e0e9c97971c96aceea1c38c12fc8fd25c536d468660405161201791815260200190565b60405180910390a463ffffffff851615612089576001600160a01b038881166000908152600160205260408120620f424063ffffffff89168702049283929088166120625733612064565b875b6001600160a01b03168152602081019190915260400160002080549091019055909203915b865160005b81811015612125576120c4858983815181106120ac576120ac612c21565b602002602001015163ffffffff16620f424091020490565b6001600160a01b038b1660009081526001602052604081208b519091908c90859081106120f3576120f3612c21565b6020908102919091018101516001600160a01b031682528101919091526040016000208054909101905560010161208e565b5050801561219057604051633e0f9fff60e11b81526001600160a01b038981166004830152602482018390528a1690637c1f3ffe90604401600060405180830381600087803b15801561217757600080fd5b505af115801561218b573d6000803e3d6000fd5b505050505b505050505050505050565b60008383836040516020016121b293929190612d4d565b6040516020818303038152906040528051906020012090509392505050565b6000611720838330604051723d605d80600a3d3981f336603057343d52307f60681b81527f830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b160138201527260203da23d3df35b3d3d3d3d363d3d37363d7360681b6033820152606093841b60468201526d5af43d3d93803e605b57fd5bf3ff60901b605a820152921b6068830152607c8201526067808220609c830152605591012090565b6001600160a01b03811660009081526020819052604081205461229b90600190612dd2565b6001600160a01b0383166000818152602081905260409020600190559091506122c4908261271a565b919050565b6001600160a01b03808216600090815260016020818152604080842094871684529390529181205490916122fc91612dd2565b6001600160a01b038084166000818152600160208181526040808420958a16845294905292902091909155909150610900908483612770565b6000604051723d605d80600a3d3981f336603057343d52307f60681b81527f830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b160138201527260203da23d3df35b3d3d3d3d363d3d37363d7360681b60338201528360601b60468201526c5af43d3d93803e605b57fd5bf360981b605a820152826067826000f59150506001600160a01b0381166109005760405163380bbe1360e01b815260040160405180910390fd5b6000604051723d605d80600a3d3981f336603057343d52307f60681b81527f830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b160138201527260203da23d3df35b3d3d3d3d363d3d37363d7360681b60338201528260601b60468201526c5af43d3d93803e605b57fd5bf360981b605a8201526067816000f09150506001600160a01b0381166122c457604051630985da9b60e41b815260040160405180910390fd5b600061250586868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a0282810182019093528982529093508992508891829185019084908082843760009201919091525087925061219b915050565b6001600160a01b0388166000818152600260205260408082208490555192935090917f45e1e99513dd915ac128b94953ca64c6375717ea1894b3114db08cdca51debd29190a250505050505050565b6001600160a01b038516600081815260208190526040812054913190821561257d576001830392505b5081810182156125a4576001600160a01b0388166000908152602081905260409020600190555b836001600160a01b0316886001600160a01b03167f87c3ca0a87d9b82033e4bc55e6d30621f8d7e0c9d8ca7988edfde8932787b77b836040516125e991815260200190565b60405180910390a363ffffffff85161561264857620f424063ffffffff8616820204806000806001600160a01b0388166126235733612625565b875b6001600160a01b0316815260208101919091526040016000208054909101905590035b865160005b818110156126b25761266b838983815181106120ac576120ac612c21565b6000808b848151811061268057612680612c21565b6020908102919091018101516001600160a01b031682528101919091526040016000208054909101905560010161264d565b5050811561271057604051632ac3affd60e21b8152600481018390526001600160a01b0389169063ab0ebff490602401600060405180830381600087803b1580156126fc57600080fd5b505af1158015611369573d6000803e3d6000fd5b5050505050505050565b600080600080600085875af190508061276b5760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610448565b505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806127e85760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610448565b50505050565b6001600160a01b038116811461280357600080fd5b50565b60006020828403121561281857600080fd5b8135611720816127ee565b60008083601f84011261283557600080fd5b50813567ffffffffffffffff81111561284d57600080fd5b6020830191508360208260051b850101111561286857600080fd5b9250929050565b803563ffffffff811681146122c457600080fd5b60008060008060008060008060c0898b03121561289f57600080fd5b88356128aa816127ee565b975060208901356128ba816127ee565b9650604089013567ffffffffffffffff808211156128d757600080fd5b6128e38c838d01612823565b909850965060608b01359150808211156128fc57600080fd5b506129098b828c01612823565b909550935061291c905060808a0161286f565b915060a089013561292c816127ee565b809150509295985092959890939650565b60008060008060006060868803121561295557600080fd5b853567ffffffffffffffff8082111561296d57600080fd5b61297989838a01612823565b9097509550602088013591508082111561299257600080fd5b5061299f88828901612823565b90945092506129b290506040870161286f565b90509295509295909350565b600080600080606085870312156129d457600080fd5b84356129df816127ee565b935060208501359250604085013567ffffffffffffffff811115612a0257600080fd5b612a0e87828801612823565b95989497509550505050565b60008060008060008060808789031215612a3357600080fd5b863567ffffffffffffffff80821115612a4b57600080fd5b612a578a838b01612823565b90985096506020890135915080821115612a7057600080fd5b50612a7d89828a01612823565b9095509350612a9090506040880161286f565b91506060870135612aa0816127ee565b809150509295509295509295565b600080600080600080600060a0888a031215612ac957600080fd5b8735612ad4816127ee565b9650602088013567ffffffffffffffff80821115612af157600080fd5b612afd8b838c01612823565b909850965060408a0135915080821115612b1657600080fd5b50612b238a828b01612823565b9095509350612b3690506060890161286f565b91506080880135612b46816127ee565b8091505092959891949750929550565b60008060408385031215612b6957600080fd5b8235612b74816127ee565b91506020830135612b84816127ee565b809150509250929050565b60008060008060008060808789031215612ba857600080fd5b8635612bb3816127ee565b9550602087013567ffffffffffffffff80821115612bd057600080fd5b612bdc8a838b01612823565b90975095506040890135915080821115612bf557600080fd5b50612c0289828a01612823565b9094509250612c1590506060880161286f565b90509295509295509295565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115612c6057612c60612c37565b500190565b634e487b7160e01b600052604160045260246000fd5b84815260606020808301829052908201849052600090859060808401835b87811015612cc7578335612cac816127ee565b6001600160a01b031682529282019290820190600101612c99565b508481036040860152855180825290820192508186019060005b81811015612cfd57825185529383019391830191600101612ce1565b50929998505050505050505050565b600060208284031215612d1e57600080fd5b5051919050565b600063ffffffff808316818516808303821115612d4457612d44612c37565b01949350505050565b835160009082906020808801845b83811015612d805781516001600160a01b031685529382019390820190600101612d5b565b5050865181880193925060005b81811015612daf57845163ffffffff1684529382019392820192600101612d8d565b50505060e09490941b6001600160e01b0319168452505060049091019392505050565b600082821015612de457612de4612c37565b50039056fea264697066735822122036248c612dea843014ab79dee61a4d70e576e11e62076d81354af9b8819f4d0164736f6c634300080e0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x118 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x77B1E4E9 GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xC7DE6440 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xC7DE6440 EQ PUSH2 0x34E JUMPI DUP1 PUSH4 0xD0E4B2F4 EQ PUSH2 0x36E JUMPI DUP1 PUSH4 0xE10E51D6 EQ PUSH2 0x38E JUMPI DUP1 PUSH4 0xE61CB05E EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0xECEF0ACE EQ PUSH2 0x3EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x77B1E4E9 EQ PUSH2 0x27E JUMPI DUP1 PUSH4 0x8117ABC1 EQ PUSH2 0x29E JUMPI DUP1 PUSH4 0x88C662AA EQ PUSH2 0x2D2 JUMPI DUP1 PUSH4 0xA5E3909E EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0xC3A8962C EQ PUSH2 0x32E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3BB66A7B GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x3BB66A7B EQ PUSH2 0x1CF JUMPI DUP1 PUSH4 0x3F26479E EQ PUSH2 0x1EF JUMPI DUP1 PUSH4 0x52844DD3 EQ PUSH2 0x206 JUMPI DUP1 PUSH4 0x6E5F6919 EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0x7601F782 EQ PUSH2 0x25E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1267C6DA EQ PUSH2 0x124 JUMPI DUP1 PUSH4 0x15811302 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x189CBAA0 EQ PUSH2 0x166 JUMPI DUP1 PUSH4 0x1DA0B8FC EQ PUSH2 0x186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x11F JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x13F CALLDATASIZE PUSH1 0x4 PUSH2 0x2806 JUMP JUMPDEST PUSH2 0x40B JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x161 CALLDATASIZE PUSH1 0x4 PUSH2 0x2883 JUMP JUMPDEST PUSH2 0x4A6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x172 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x181 CALLDATASIZE PUSH1 0x4 PUSH2 0x2806 JUMP JUMPDEST PUSH2 0x7E0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x1A1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2806 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x1EA CALLDATASIZE PUSH1 0x4 PUSH2 0x2806 JUMP JUMPDEST PUSH2 0x8AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH3 0xF4240 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x221 CALLDATASIZE PUSH1 0x4 PUSH2 0x293D JUMP JUMPDEST PUSH2 0x906 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1C6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x259 CALLDATASIZE PUSH1 0x4 PUSH2 0x29BE JUMP JUMPDEST PUSH2 0xBDB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x279 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A1A JUMP JUMPDEST PUSH2 0xCE6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x299 CALLDATASIZE PUSH1 0x4 PUSH2 0x2883 JUMP JUMPDEST PUSH2 0x106E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x2ED CALLDATASIZE PUSH1 0x4 PUSH2 0x2806 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x31A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x329 CALLDATASIZE PUSH1 0x4 PUSH2 0x2AAE JUMP JUMPDEST PUSH2 0x1377 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x349 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B56 JUMP JUMPDEST PUSH2 0x1660 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x369 CALLDATASIZE PUSH1 0x4 PUSH2 0x2806 JUMP JUMPDEST PUSH2 0x1727 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x389 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B56 JUMP JUMPDEST PUSH2 0x17F6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x39A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x3A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x2806 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x3E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2AAE JUMP JUMPDEST PUSH2 0x18C8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x406 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B8F JUMP JUMPDEST PUSH2 0x1BDE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x451 JUMPI PUSH1 0x40 MLOAD PUSH4 0x472511EB PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE MLOAD PUSH32 0x6C2460A415B84BE3720C209FE02F2CAD7A6BCBA21E8637AFE8957B7EC4B6EF87 SWAP2 SWAP1 LOG2 POP POP JUMP JUMPDEST DUP6 DUP6 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP10 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP9 DUP3 MSTORE SWAP1 SWAP4 POP DUP9 SWAP3 POP DUP8 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP DUP4 MLOAD DUP7 SWAP3 POP PUSH1 0x2 GT ISZERO SWAP1 POP PUSH2 0x535 JUMPI DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xE8C6265 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0x564 JUMPI DUP3 MLOAD DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xB34F351D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x448 JUMP JUMPDEST PUSH3 0xF4240 PUSH2 0x571 DUP4 PUSH2 0x1E55 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x5A7 JUMPI PUSH2 0x585 DUP3 PUSH2 0x1E55 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFCC487C1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 NOT ADD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x673 JUMPI DUP5 DUP2 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x5CD JUMPI PUSH2 0x5CD PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x5F0 JUMPI PUSH2 0x5F0 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x622 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAC6BD233 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x63C JUMPI PUSH2 0x63C PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x66B JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x5B0 JUMP JUMPDEST POP PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x68E JUMPI PUSH2 0x68E PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x6BD JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST POP PUSH3 0x186A0 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x6F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x308440E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH2 0x760 DUP12 DUP11 DUP11 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP15 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP14 DUP3 MSTORE SWAP1 SWAP4 POP DUP14 SWAP3 POP DUP13 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP12 SWAP3 POP PUSH2 0x1E9A SWAP2 POP POP JUMP JUMPDEST PUSH2 0x7D3 DUP12 DUP12 DUP12 DUP12 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP16 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP15 DUP3 MSTORE SWAP1 SWAP4 POP DUP15 SWAP3 POP DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP13 SWAP3 POP DUP12 SWAP2 POP PUSH2 0x1EEC SWAP1 POP JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x821 JUMPI PUSH1 0x40 MLOAD PUSH4 0x472511EB PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP2 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP1 MLOAD SWAP2 SWAP4 AND SWAP2 SWAP1 PUSH32 0x943D69CF2BBE08A9D44B3C4CE6DA17D939D758739370620871CE99A6437866D0 SWAP1 DUP5 SWAP1 LOG4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SUB PUSH2 0x8D1 JUMPI PUSH1 0x0 PUSH2 0x8DD JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND BALANCE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x900 SWAP2 SWAP1 PUSH2 0x2C4D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP10 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP9 DUP3 MSTORE SWAP1 SWAP4 POP DUP9 SWAP3 POP DUP8 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP DUP4 MLOAD DUP7 SWAP3 POP PUSH1 0x2 GT ISZERO SWAP1 POP PUSH2 0x997 JUMPI DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xE8C6265 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0x9C6 JUMPI DUP3 MLOAD DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xB34F351D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x448 JUMP JUMPDEST PUSH3 0xF4240 PUSH2 0x9D3 DUP4 PUSH2 0x1E55 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x9E7 JUMPI PUSH2 0x585 DUP3 PUSH2 0x1E55 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 NOT ADD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAB3 JUMPI DUP5 DUP2 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0xA0D JUMPI PUSH2 0xA0D PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xA30 JUMPI PUSH2 0xA30 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0xA62 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAC6BD233 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xA7C JUMPI PUSH2 0xA7C PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0xAAB JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x9F0 JUMP JUMPDEST POP PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xACE JUMPI PUSH2 0xACE PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0xAFD JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST POP PUSH3 0x186A0 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0xB30 JUMPI PUSH1 0x40 MLOAD PUSH4 0x308440E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBA1 DUP11 DUP11 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP15 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP14 DUP3 MSTORE SWAP1 SWAP4 POP DUP14 SWAP3 POP DUP13 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP12 SWAP3 POP PUSH2 0x219B SWAP2 POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0xBCD PUSH32 0x0 DUP3 PUSH2 0x21D1 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBF6 JUMPI PUSH2 0xBF6 PUSH2 0x2C65 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xC1F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP5 ISZERO PUSH2 0xC36 JUMPI PUSH2 0xC33 DUP7 PUSH2 0x2276 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xC96 JUMPI PUSH2 0xC71 DUP8 DUP7 DUP7 DUP5 DUP2 DUP2 LT PUSH2 0xC57 JUMPI PUSH2 0xC57 PUSH2 0x2C21 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xC6C SWAP2 SWAP1 PUSH2 0x2806 JUMP JUMPDEST PUSH2 0x22C9 JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC83 JUMPI PUSH2 0xC83 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xC39 JUMP JUMPDEST POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xA9E30BF144F83390A4FE47562A4E16892108102221C674FF538DA0B72A83D174 DUP3 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0xCD6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2C7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP11 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP10 DUP3 MSTORE SWAP1 SWAP4 POP DUP10 SWAP3 POP DUP9 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP DUP4 MLOAD DUP8 SWAP3 POP PUSH1 0x2 GT ISZERO SWAP1 POP PUSH2 0xD77 JUMPI DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xE8C6265 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0xDA6 JUMPI DUP3 MLOAD DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xB34F351D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x448 JUMP JUMPDEST PUSH3 0xF4240 PUSH2 0xDB3 DUP4 PUSH2 0x1E55 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0xDC7 JUMPI PUSH2 0x585 DUP3 PUSH2 0x1E55 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 NOT ADD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xE93 JUMPI DUP5 DUP2 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0xDED JUMPI PUSH2 0xDED PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xE10 JUMPI PUSH2 0xE10 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0xE42 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAC6BD233 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xE5C JUMPI PUSH2 0xE5C PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0xE8B JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xDD0 JUMP JUMPDEST POP PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xEAE JUMPI PUSH2 0xEAE PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0xEDD JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST POP PUSH3 0x186A0 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0xF10 JUMPI PUSH1 0x40 MLOAD PUSH4 0x308440E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF81 DUP12 DUP12 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP16 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP15 DUP3 MSTORE SWAP1 SWAP4 POP DUP15 SWAP3 POP DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP13 SWAP3 POP PUSH2 0x219B SWAP2 POP POP JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0xFC2 JUMPI PUSH2 0xFBB PUSH32 0x0 DUP3 PUSH2 0x2335 JUMP JUMPDEST SWAP5 POP PUSH2 0x101F JUMP JUMPDEST PUSH2 0xFEB PUSH32 0x0 PUSH2 0x23E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 DUP10 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE SWAP5 POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8D5F9943C664A3EDAF4D3EB18CC5E2C45A7D2DC5869BE33D33BBC0FFF9BC2590 SWAP2 SWAP1 LOG2 POP POP POP POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP10 SWAP2 AND CALLER EQ PUSH2 0x10AF JUMPI PUSH1 0x40 MLOAD PUSH4 0x472511EB PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP11 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP10 DUP3 MSTORE SWAP1 SWAP4 POP DUP10 SWAP3 POP DUP9 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP DUP4 MLOAD DUP8 SWAP3 POP PUSH1 0x2 GT ISZERO SWAP1 POP PUSH2 0x113E JUMPI DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xE8C6265 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0x116D JUMPI DUP3 MLOAD DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xB34F351D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x448 JUMP JUMPDEST PUSH3 0xF4240 PUSH2 0x117A DUP4 PUSH2 0x1E55 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x118E JUMPI PUSH2 0x585 DUP3 PUSH2 0x1E55 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 NOT ADD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x125A JUMPI DUP5 DUP2 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x11B4 JUMPI PUSH2 0x11B4 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x11D7 JUMPI PUSH2 0x11D7 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x1209 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAC6BD233 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1223 JUMPI PUSH2 0x1223 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x1252 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1197 JUMP JUMPDEST POP PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1275 JUMPI PUSH2 0x1275 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x12A4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST POP PUSH3 0x186A0 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x12D7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x308440E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH2 0x12E5 DUP13 DUP12 DUP12 DUP12 DUP12 DUP12 PUSH2 0x2494 JUMP JUMPDEST PUSH2 0x1369 DUP13 DUP13 DUP13 DUP13 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP12 DUP12 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 DUP14 SWAP3 POP DUP13 SWAP2 POP PUSH2 0x1EEC SWAP1 POP JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP9 SWAP2 AND CALLER EQ PUSH2 0x13B8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x472511EB PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP11 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP10 DUP3 MSTORE SWAP1 SWAP4 POP DUP10 SWAP3 POP DUP9 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP DUP4 MLOAD DUP8 SWAP3 POP PUSH1 0x2 GT ISZERO SWAP1 POP PUSH2 0x1447 JUMPI DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xE8C6265 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0x1476 JUMPI DUP3 MLOAD DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xB34F351D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x448 JUMP JUMPDEST PUSH3 0xF4240 PUSH2 0x1483 DUP4 PUSH2 0x1E55 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1497 JUMPI PUSH2 0x585 DUP3 PUSH2 0x1E55 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 NOT ADD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1563 JUMPI DUP5 DUP2 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x14BD JUMPI PUSH2 0x14BD PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x14E0 JUMPI PUSH2 0x14E0 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x1512 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAC6BD233 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x152C JUMPI PUSH2 0x152C PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x155B JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x14A0 JUMP JUMPDEST POP PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x157E JUMPI PUSH2 0x157E PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x15AD JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST POP PUSH3 0x186A0 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x15E0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x308440E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH2 0x15EE DUP12 DUP12 DUP12 DUP12 DUP12 DUP12 PUSH2 0x2494 JUMP JUMPDEST PUSH2 0x7D3 DUP12 DUP12 DUP12 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP16 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP15 DUP3 MSTORE SWAP1 SWAP4 POP DUP15 SWAP3 POP DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP13 SWAP3 POP DUP12 SWAP2 POP PUSH2 0x2554 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SUB PUSH2 0x1686 JUMPI PUSH1 0x0 PUSH2 0x16F0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16CC 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 0x16F0 SWAP2 SWAP1 PUSH2 0x2D0C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1720 SWAP2 SWAP1 PUSH2 0x2C4D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x1769 JUMPI PUSH1 0x40 MLOAD PUSH4 0x472511EB PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP2 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP1 MLOAD CALLER SWAP5 SWAP2 SWAP1 SWAP2 AND SWAP3 SWAP2 PUSH32 0x943D69CF2BBE08A9D44B3C4CE6DA17D939D758739370620871CE99A6437866D0 SWAP2 LOG4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x1837 JUMPI PUSH1 0x40 MLOAD PUSH4 0x472511EB PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x186A JUMPI PUSH1 0x40 MLOAD PUSH4 0xC3691307 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP5 DUP9 AND SWAP5 DUP6 OR SWAP1 SSTORE MLOAD PUSH32 0x107CF6EA8668D533DF1AAB5BB8B6315BB0C25F0B6C955558D09368F290668FC7 SWAP2 SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST DUP6 DUP6 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP10 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP9 DUP3 MSTORE SWAP1 SWAP4 POP DUP9 SWAP3 POP DUP8 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP DUP4 MLOAD DUP7 SWAP3 POP PUSH1 0x2 GT ISZERO SWAP1 POP PUSH2 0x1957 JUMPI DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xE8C6265 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0x1986 JUMPI DUP3 MLOAD DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xB34F351D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x448 JUMP JUMPDEST PUSH3 0xF4240 PUSH2 0x1993 DUP4 PUSH2 0x1E55 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x19A7 JUMPI PUSH2 0x585 DUP3 PUSH2 0x1E55 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 NOT ADD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1A73 JUMPI DUP5 DUP2 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x19CD JUMPI PUSH2 0x19CD PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x19F0 JUMPI PUSH2 0x19F0 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x1A22 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAC6BD233 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1A3C JUMPI PUSH2 0x1A3C PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x1A6B JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x19B0 JUMP JUMPDEST POP PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1A8E JUMPI PUSH2 0x1A8E PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x1ABD JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST POP PUSH3 0x186A0 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x1AF0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x308440E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH2 0x1B60 DUP11 DUP11 DUP11 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP15 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP14 DUP3 MSTORE SWAP1 SWAP4 POP DUP14 SWAP3 POP DUP13 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP12 SWAP3 POP PUSH2 0x1E9A SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1BD2 DUP11 DUP11 DUP11 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP15 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP14 DUP3 MSTORE SWAP1 SWAP4 POP DUP14 SWAP3 POP DUP13 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP12 SWAP3 POP DUP11 SWAP2 POP PUSH2 0x2554 SWAP1 POP JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP8 SWAP2 AND CALLER EQ PUSH2 0x1C1F JUMPI PUSH1 0x40 MLOAD PUSH4 0x472511EB PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST DUP6 DUP6 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP10 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP9 DUP3 MSTORE SWAP1 SWAP4 POP DUP9 SWAP3 POP DUP8 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP DUP4 MLOAD DUP7 SWAP3 POP PUSH1 0x2 GT ISZERO SWAP1 POP PUSH2 0x1CAE JUMPI DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xE8C6265 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0x1CDD JUMPI DUP3 MLOAD DUP3 MLOAD PUSH1 0x40 MLOAD PUSH4 0xB34F351D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x448 JUMP JUMPDEST PUSH3 0xF4240 PUSH2 0x1CEA DUP4 PUSH2 0x1E55 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1CFE JUMPI PUSH2 0x585 DUP3 PUSH2 0x1E55 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 NOT ADD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1DCA JUMPI DUP5 DUP2 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x1D24 JUMPI PUSH2 0x1D24 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1D47 JUMPI PUSH2 0x1D47 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x1D79 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAC6BD233 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1D93 JUMPI PUSH2 0x1D93 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x1DC2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1D07 JUMP JUMPDEST POP PUSH1 0x0 PUSH4 0xFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1DE5 JUMPI PUSH2 0x1DE5 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND SUB PUSH2 0x1E14 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB7E4C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST POP PUSH3 0x186A0 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x1E47 JUMPI PUSH1 0x40 MLOAD PUSH4 0x308440E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST PUSH2 0x1BD2 DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH2 0x2494 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E93 JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1E76 JUMPI PUSH2 0x1E76 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x1E89 SWAP2 SWAP1 PUSH2 0x2D25 JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x1E5C JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1EA7 DUP5 DUP5 DUP5 PUSH2 0x219B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP2 EQ PUSH2 0x1EE5 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDD5FF457 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x448 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP12 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP1 SWAP3 SWAP1 SWAP2 DUP4 SWAP2 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F56 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 0x1F7A SWAP2 SWAP1 PUSH2 0x2D0C JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1F87 JUMPI PUSH1 0x0 NOT ADD JUMPDEST DUP2 ISZERO PUSH2 0x1F94 JUMPI PUSH1 0x1 DUP3 SUB SWAP2 POP JUMPDEST DUP2 DUP2 ADD SWAP3 POP DUP2 ISZERO PUSH2 0x1FC8 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP5 DUP15 AND DUP5 MSTORE SWAP4 SWAP1 MSTORE SWAP2 SWAP1 KECCAK256 SSTORE JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xB5EE5DC3D2C31A019BBF2C787E0E9C97971C96ACEEA1C38C12FC8FD25C536D46 DUP7 PUSH1 0x40 MLOAD PUSH2 0x2017 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH4 0xFFFFFFFF DUP6 AND ISZERO PUSH2 0x2089 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH3 0xF4240 PUSH4 0xFFFFFFFF DUP10 AND DUP8 MUL DIV SWAP3 DUP4 SWAP3 SWAP1 DUP9 AND PUSH2 0x2062 JUMPI CALLER PUSH2 0x2064 JUMP JUMPDEST DUP8 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE SWAP1 SWAP3 SUB SWAP2 JUMPDEST DUP7 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2125 JUMPI PUSH2 0x20C4 DUP6 DUP10 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x20AC JUMPI PUSH2 0x20AC PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH4 0xFFFFFFFF AND PUSH3 0xF4240 SWAP2 MUL DIV SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP12 MLOAD SWAP1 SWAP2 SWAP1 DUP13 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x20F3 JUMPI PUSH2 0x20F3 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE PUSH1 0x1 ADD PUSH2 0x208E JUMP JUMPDEST POP POP DUP1 ISZERO PUSH2 0x2190 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3E0F9FFF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP11 AND SWAP1 PUSH4 0x7C1F3FFE SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2177 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x218B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x21B2 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2D4D JUMP JUMPDEST 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 0x0 PUSH2 0x1720 DUP4 DUP4 ADDRESS PUSH1 0x40 MLOAD PUSH19 0x3D605D80600A3D3981F336603057343D52307F PUSH1 0x68 SHL DUP2 MSTORE PUSH32 0x830D2D700A97AF574B186C80D40429385D24241565B08A7C559BA283A964D9B1 PUSH1 0x13 DUP3 ADD MSTORE PUSH19 0x60203DA23D3DF35B3D3D3D3D363D3D37363D73 PUSH1 0x68 SHL PUSH1 0x33 DUP3 ADD MSTORE PUSH1 0x60 SWAP4 DUP5 SHL PUSH1 0x46 DUP3 ADD MSTORE PUSH14 0x5AF43D3D93803E605B57FD5BF3FF PUSH1 0x90 SHL PUSH1 0x5A DUP3 ADD MSTORE SWAP3 SHL PUSH1 0x68 DUP4 ADD MSTORE PUSH1 0x7C DUP3 ADD MSTORE PUSH1 0x67 DUP1 DUP3 KECCAK256 PUSH1 0x9C DUP4 ADD MSTORE PUSH1 0x55 SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x229B SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x2DD2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 SWAP1 SSTORE SWAP1 SWAP2 POP PUSH2 0x22C4 SWAP1 DUP3 PUSH2 0x271A JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP5 DUP8 AND DUP5 MSTORE SWAP4 SWAP1 MSTORE SWAP2 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x22FC SWAP2 PUSH2 0x2DD2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP6 DUP11 AND DUP5 MSTORE SWAP5 SWAP1 MSTORE SWAP3 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP1 SWAP2 POP PUSH2 0x900 SWAP1 DUP5 DUP4 PUSH2 0x2770 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH19 0x3D605D80600A3D3981F336603057343D52307F PUSH1 0x68 SHL DUP2 MSTORE PUSH32 0x830D2D700A97AF574B186C80D40429385D24241565B08A7C559BA283A964D9B1 PUSH1 0x13 DUP3 ADD MSTORE PUSH19 0x60203DA23D3DF35B3D3D3D3D363D3D37363D73 PUSH1 0x68 SHL PUSH1 0x33 DUP3 ADD MSTORE DUP4 PUSH1 0x60 SHL PUSH1 0x46 DUP3 ADD MSTORE PUSH13 0x5AF43D3D93803E605B57FD5BF3 PUSH1 0x98 SHL PUSH1 0x5A DUP3 ADD MSTORE DUP3 PUSH1 0x67 DUP3 PUSH1 0x0 CREATE2 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x900 JUMPI PUSH1 0x40 MLOAD PUSH4 0x380BBE13 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH19 0x3D605D80600A3D3981F336603057343D52307F PUSH1 0x68 SHL DUP2 MSTORE PUSH32 0x830D2D700A97AF574B186C80D40429385D24241565B08A7C559BA283A964D9B1 PUSH1 0x13 DUP3 ADD MSTORE PUSH19 0x60203DA23D3DF35B3D3D3D3D363D3D37363D73 PUSH1 0x68 SHL PUSH1 0x33 DUP3 ADD MSTORE DUP3 PUSH1 0x60 SHL PUSH1 0x46 DUP3 ADD MSTORE PUSH13 0x5AF43D3D93803E605B57FD5BF3 PUSH1 0x98 SHL PUSH1 0x5A DUP3 ADD MSTORE PUSH1 0x67 DUP2 PUSH1 0x0 CREATE SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x22C4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x985DA9B PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2505 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 POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP11 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP10 DUP3 MSTORE SWAP1 SWAP4 POP DUP10 SWAP3 POP DUP9 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP8 SWAP3 POP PUSH2 0x219B SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0x45E1E99513DD915AC128B94953CA64C6375717EA1894B3114DB08CDCA51DEBD2 SWAP2 SWAP1 LOG2 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 BALANCE SWAP1 DUP3 ISZERO PUSH2 0x257D JUMPI PUSH1 0x1 DUP4 SUB SWAP3 POP JUMPDEST POP DUP2 DUP2 ADD DUP3 ISZERO PUSH2 0x25A4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 SWAP1 SSTORE JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x87C3CA0A87D9B82033E4BC55E6D30621F8D7E0C9D8CA7988EDFDE8932787B77B DUP4 PUSH1 0x40 MLOAD PUSH2 0x25E9 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH4 0xFFFFFFFF DUP6 AND ISZERO PUSH2 0x2648 JUMPI PUSH3 0xF4240 PUSH4 0xFFFFFFFF DUP7 AND DUP3 MUL DIV DUP1 PUSH1 0x0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH2 0x2623 JUMPI CALLER PUSH2 0x2625 JUMP JUMPDEST DUP8 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE SWAP1 SUB JUMPDEST DUP7 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x26B2 JUMPI PUSH2 0x266B DUP4 DUP10 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x20AC JUMPI PUSH2 0x20AC PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP12 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2680 JUMPI PUSH2 0x2680 PUSH2 0x2C21 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE PUSH1 0x1 ADD PUSH2 0x264D JUMP JUMPDEST POP POP DUP2 ISZERO PUSH2 0x2710 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AC3AFFD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH4 0xAB0EBFF4 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1369 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 GAS CALL SWAP1 POP DUP1 PUSH2 0x276B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x11551217D514905394D1915497D19052531151 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x448 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE DUP4 PUSH1 0x4 DUP3 ADD MSTORE DUP3 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x0 PUSH1 0x44 DUP4 PUSH1 0x0 DUP10 GAS CALL RETURNDATASIZE ISZERO PUSH1 0x1F RETURNDATASIZE GT PUSH1 0x1 PUSH1 0x0 MLOAD EQ AND OR AND SWAP2 POP POP DUP1 PUSH2 0x27E8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1514905394D1915497D19052531151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x448 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2803 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2818 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1720 DUP2 PUSH2 0x27EE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2835 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x284D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x2868 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x22C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x289F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x28AA DUP2 PUSH2 0x27EE JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x28BA DUP2 PUSH2 0x27EE JUMP JUMPDEST SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x28D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x28E3 DUP13 DUP4 DUP14 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH1 0x60 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x28FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2909 DUP12 DUP3 DUP13 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH2 0x291C SWAP1 POP PUSH1 0x80 DUP11 ADD PUSH2 0x286F JUMP JUMPDEST SWAP2 POP PUSH1 0xA0 DUP10 ADD CALLDATALOAD PUSH2 0x292C DUP2 PUSH2 0x27EE JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2955 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x296D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2979 DUP10 DUP4 DUP11 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2992 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x299F DUP9 DUP3 DUP10 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x29B2 SWAP1 POP PUSH1 0x40 DUP8 ADD PUSH2 0x286F JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x29D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x29DF DUP2 PUSH2 0x27EE JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2A02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2A0E DUP8 DUP3 DUP9 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x2A33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2A4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2A57 DUP11 DUP4 DUP12 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2A70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A7D DUP10 DUP3 DUP11 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH2 0x2A90 SWAP1 POP PUSH1 0x40 DUP9 ADD PUSH2 0x286F JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x2AA0 DUP2 PUSH2 0x27EE JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x2AC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x2AD4 DUP2 PUSH2 0x27EE JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2AF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2AFD DUP12 DUP4 DUP13 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH1 0x40 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2B16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B23 DUP11 DUP3 DUP12 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH2 0x2B36 SWAP1 POP PUSH1 0x60 DUP10 ADD PUSH2 0x286F JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x2B46 DUP2 PUSH2 0x27EE JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2B74 DUP2 PUSH2 0x27EE JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x2B84 DUP2 PUSH2 0x27EE JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x2BA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x2BB3 DUP2 PUSH2 0x27EE JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2BD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2BDC DUP11 DUP4 DUP12 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2BF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C02 DUP10 DUP3 DUP11 ADD PUSH2 0x2823 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x2C15 SWAP1 POP PUSH1 0x60 DUP9 ADD PUSH2 0x286F JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x2C60 JUMPI PUSH2 0x2C60 PUSH2 0x2C37 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP1 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP6 SWAP1 PUSH1 0x80 DUP5 ADD DUP4 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x2CC7 JUMPI DUP4 CALLDATALOAD PUSH2 0x2CAC DUP2 PUSH2 0x27EE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2C99 JUMP JUMPDEST POP DUP5 DUP2 SUB PUSH1 0x40 DUP7 ADD MSTORE DUP6 MLOAD DUP1 DUP3 MSTORE SWAP1 DUP3 ADD SWAP3 POP DUP2 DUP7 ADD SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2CFD JUMPI DUP3 MLOAD DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2CE1 JUMP JUMPDEST POP SWAP3 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D1E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x2D44 JUMPI PUSH2 0x2D44 PUSH2 0x2C37 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP4 MLOAD PUSH1 0x0 SWAP1 DUP3 SWAP1 PUSH1 0x20 DUP1 DUP9 ADD DUP5 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2D80 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2D5B JUMP JUMPDEST POP POP DUP7 MLOAD DUP2 DUP9 ADD SWAP4 SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2DAF JUMPI DUP5 MLOAD PUSH4 0xFFFFFFFF AND DUP5 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 DUP3 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2D8D JUMP JUMPDEST POP POP POP PUSH1 0xE0 SWAP5 SWAP1 SWAP5 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP5 MSTORE POP POP PUSH1 0x4 SWAP1 SWAP2 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2DE4 JUMPI PUSH2 0x2DE4 PUSH2 0x2C37 JUMP JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLDATASIZE 0x24 DUP13 PUSH2 0x2DEA DUP5 ADDRESS EQ 0xAB PUSH26 0xDEE61A4D70E576E11E62076D81354AF9B8819F4D0164736F6C63 NUMBER STOP ADDMOD 0xE STOP CALLER ",
              "sourceMap": "12188:28647:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20693:194;;;;;;;;;;-1:-1:-1;20693:194:2;;;;;:::i;:::-;;:::i;:::-;;24896:575;;;;;;;;;;-1:-1:-1;24896:575:2;;;;;:::i;:::-;;:::i;21472:270::-;;;;;;;;;;-1:-1:-1;21472:270:2;;;;;:::i;:::-;;:::i;27980:106::-;;;;;;;;;;-1:-1:-1;27980:106:2;;;;;:::i;:::-;-1:-1:-1;;;;;28061:13:2;28035:7;28061:13;;;:6;:13;;;;;:18;;27980:106;;;;2370:25:6;;;2358:2;2343:18;27980:106:2;;;;;;;;28893:168;;;;;;;;;;-1:-1:-1;28893:168:2;;;;;:::i;:::-;;:::i;12649:46::-;;;;;;;;;;;;12692:3;12649:46;;18519:440;;;;;;;;;;-1:-1:-1;18519:440:2;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3601:32:6;;;3583:51;;3571:2;3556:18;18519:440:2;3437:203:6;27096:695:2;;;;;;;;;;-1:-1:-1;27096:695:2;;;;;:::i;:::-;;:::i;17169:827::-;;;;;;;;;;-1:-1:-1;17169:827:2;;;;;:::i;:::-;;:::i;26230:618::-;;;;;;;;;;-1:-1:-1;26230:618:2;;;;;:::i;:::-;;:::i;12895:54::-;;;;;;;;;;;;;;;28251:118;;;;;;;;;;-1:-1:-1;28251:118:2;;;;;:::i;:::-;-1:-1:-1;;;;;28338:13:2;;;28312:7;28338:13;;;:6;:13;;;;;:24;;;;;28251:118;23442:586;;;;;;;;;;-1:-1:-1;23442:586:2;;;;;:::i;:::-;;:::i;29317:201::-;;;;;;;;;;-1:-1:-1;29317:201:2;;;;;:::i;:::-;;:::i;21063:277::-;;;;;;;;;;-1:-1:-1;21063:277:2;;;;;:::i;:::-;;:::i;20210:307::-;;;;;;;;;;-1:-1:-1;20210:307:2;;;;;:::i;:::-;;:::i;28570:142::-;;;;;;;;;;-1:-1:-1;28570:142:2;;;;;:::i;:::-;-1:-1:-1;;;;;28669:13:2;;;28643:7;28669:13;;;:6;:13;;;;;;;;:36;;;;28570:142;22375:543;;;;;;;;;;-1:-1:-1;22375:543:2;;;;;:::i;:::-;;:::i;19445:348::-;;;;;;;;;;-1:-1:-1;19445:348:2;;;;;:::i;:::-;;:::i;20693:194::-;-1:-1:-1;;;;;13569:13:2;;;;;;;:6;:13;;;;;:24;;;:13;;:24;13555:10;:38;13551:75;;13602:24;;-1:-1:-1;;;13602:24:2;;13615:10;13602:24;;;3583:51:6;3556:18;;13602:24:2;;;;;;;;13551:75;-1:-1:-1;;;;;20801:13:2;::::1;;::::0;;;:6:::1;:13;::::0;;;;;;;:36;;::::1;20794:43:::0;;-1:-1:-1;;;;;;20794:43:2::1;::::0;;20852:28;::::1;::::0;20801:13;20852:28:::1;20693:194:::0;;:::o;24896:575::-;25150:8;;14373:1489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14373:1489:2;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25160:18:2;;-1:-1:-1;25160:18:2;;;;14373:1489;;;25160:18;;14373:1489;25160:18;14373:1489;;;;;;;;;-1:-1:-1;;14523:15:2;;25180:14;;-1:-1:-1;14541:1:2;-1:-1:-1;14519:77:2;;-1:-1:-1;14519:77:2;;14580:8;:15;14551:45;;-1:-1:-1;;;14551:45:2;;;;;;2370:25:6;;2358:2;2343:18;;2224:177;14519:77:2;14629:18;:25;14610:8;:15;:44;14606:157;;14720:15;;14737:25;;14675:88;;-1:-1:-1;;;14675:88:2;;;;;8373:25:6;;;;8414:18;;;8407:34;8346:18;;14675:88:2;8199:248:6;14606:157:2;12692:3;14844:27;14852:18;14844:7;:27::i;:::-;:47;;;14840:136;;14948:27;14956:18;14948:7;:27::i;:::-;14912:64;;-1:-1:-1;;;14912:64:2;;8626:10:6;8614:23;;;14912:64:2;;;8596:42:6;8569:18;;14912:64:2;8452:192:6;14840:136:2;15143:15;;-1:-1:-1;;15143:19:2;15122:18;15176:328;15200:10;15196:1;:14;15176:328;;;15324:8;15333:1;15337;15333:5;15324:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15309:30:2;:8;15318:1;15309:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15309:30:2;;15305:78;;15348:35;;-1:-1:-1;;;15348:35:2;;;;;2370:25:6;;;2343:18;;15348:35:2;2224:177:6;15305:78:2;15437:1;15405:34;;:18;15424:1;15405:21;;;;;;;;:::i;:::-;;;;;;;:34;;;15401:88;;15448:41;;-1:-1:-1;;;15448:41:2;;;;;2370:25:6;;;2343:18;;15448:41:2;2224:177:6;15401:88:2;15212:3;;15176:328;;;;15663:1;15622:43;;:18;15641:10;15622:30;;;;;;;;:::i;:::-;;;;;;;:43;;;15618:106;;15674:50;;-1:-1:-1;;;15674:50:2;;;;;2370:25:6;;;2343:18;;15674:50:2;2224:177:6;15618:106:2;14986:749;12819:3;15748:14;:36;;;15744:100;;;15793:51;;-1:-1:-1;;;15793:51:2;;8626:10:6;8614:23;;15793:51:2;;;8596:42:6;8569:18;;15793:51:2;8452:192:6;15744:100:2;25290:68:::1;25306:5;25313:8;;25290:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;25290:68:2::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;-1:-1:-1;25323:18:2;;-1:-1:-1;25323:18:2;;;;25290:68;::::1;::::0;25323:18;;25290:68;25323:18;25290:68;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;25343:14:2;;-1:-1:-1;25290:15:2::1;::::0;-1:-1:-1;;25290:68:2:i:1;:::-;25368:96;25385:5;25392;25399:8;;25368:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;25368:96:2::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;-1:-1:-1;25409:18:2;;-1:-1:-1;25409:18:2;;;;25368:96;::::1;::::0;25409:18;;25368:96;25409:18;25368:96;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;25429:14:2;;-1:-1:-1;25445:18:2;;-1:-1:-1;25368:16:2::1;::::0;-1:-1:-1;25368:96:2:i:1;:::-;24896:575:::0;;;;;;;;;;;:::o;21472:270::-;-1:-1:-1;;;;;13569:13:2;;;;;;;:6;:13;;;;;:24;;;:13;;:24;13555:10;:38;13551:75;;13602:24;;-1:-1:-1;;;13602:24:2;;13615:10;13602:24;;;3583:51:6;3556:18;;13602:24:2;3437:203:6;13551:75:2;-1:-1:-1;;;;;21577:13:2;;::::1;;::::0;;;:6:::1;:13;::::0;;;;;;;:36;;::::1;21570:43:::0;;-1:-1:-1;;;;;;21570:43:2::1;::::0;;;21651:24;;::::1;::::0;21628:60;;21577:13;;21651:24:::1;::::0;21577:13;21628:60:::1;::::0;21577:13;;21628:60:::1;-1:-1:-1::0;;;;;;21698:13:2::1;21733:1;21698:13:::0;;;:6:::1;:13;::::0;;;;:24:::1;;:37:::0;;-1:-1:-1;;;;;;21698:37:2::1;::::0;;21472:270::o;28893:168::-;-1:-1:-1;;;;;29006:15:2;;28956:7;29006:15;;;:6;:15;;;;;:20;:25;;:47;;29052:1;29006:47;;;29034:7;-1:-1:-1;;;;;29034:15:2;;29006:47;-1:-1:-1;;;;;28982:20:2;;:11;:20;;;;;;;;;;;:72;;;;:::i;:::-;28975:79;28893:168;-1:-1:-1;;28893:168:2:o;18519:440::-;18766:13;18711:8;;14373:1489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14373:1489:2;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18721:18:2;;-1:-1:-1;18721:18:2;;;;14373:1489;;;18721:18;;14373:1489;18721:18;14373:1489;;;;;;;;;-1:-1:-1;;14523:15:2;;18741:14;;-1:-1:-1;14541:1:2;-1:-1:-1;14519:77:2;;-1:-1:-1;14519:77:2;;14580:8;:15;14551:45;;-1:-1:-1;;;14551:45:2;;;;;;2370:25:6;;2358:2;2343:18;;2224:177;14519:77:2;14629:18;:25;14610:8;:15;:44;14606:157;;14720:15;;14737:25;;14675:88;;-1:-1:-1;;;14675:88:2;;;;;8373:25:6;;;;8414:18;;;8407:34;8346:18;;14675:88:2;8199:248:6;14606:157:2;12692:3;14844:27;14852:18;14844:7;:27::i;:::-;:47;;;14840:136;;14948:27;14956:18;14948:7;:27::i;14840:136::-;15143:15;;-1:-1:-1;;15143:19:2;15122:18;15176:328;15200:10;15196:1;:14;15176:328;;;15324:8;15333:1;15337;15333:5;15324:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15309:30:2;:8;15318:1;15309:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15309:30:2;;15305:78;;15348:35;;-1:-1:-1;;;15348:35:2;;;;;2370:25:6;;;2343:18;;15348:35:2;2224:177:6;15305:78:2;15437:1;15405:34;;:18;15424:1;15405:21;;;;;;;;:::i;:::-;;;;;;;:34;;;15401:88;;15448:41;;-1:-1:-1;;;15448:41:2;;;;;2370:25:6;;;2343:18;;15448:41:2;2224:177:6;15401:88:2;15212:3;;15176:328;;;;15663:1;15622:43;;:18;15641:10;15622:30;;;;;;;;:::i;:::-;;;;;;;:43;;;15618:106;;15674:50;;-1:-1:-1;;;15674:50:2;;;;;2370:25:6;;;2343:18;;15674:50:2;2224:177:6;15618:106:2;14986:749;12819:3;15748:14;:36;;;15744:100;;;15793:51;;-1:-1:-1;;;15793:51:2;;8626:10:6;8614:23;;15793:51:2;;;8596:42:6;8569:18;;15793:51:2;8452:192:6;15744:100:2;18791:17:::1;18811:56;18822:8;;18811:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;18811:56:2::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;-1:-1:-1;18832:18:2;;-1:-1:-1;18832:18:2;;;;18811:56;::::1;::::0;18832:18;;18811:56;18832:18;18811:56;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;18852:14:2;;-1:-1:-1;18811:10:2::1;::::0;-1:-1:-1;;18811:56:2:i:1;:::-;18791:76;;18885:67;18920:20;18942:9;18885:34;:67::i;:::-;18877:75:::0;18519:440;-1:-1:-1;;;;;;;;;;18519:440:2:o;27096:695::-;27235:29;27281:6;27267:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27267:28:2;-1:-1:-1;27235:60:2;-1:-1:-1;27305:17:2;27336:16;;27332:77;;27380:18;27390:7;27380:9;:18::i;:::-;27368:30;;27332:77;27510:9;27505:199;27525:17;;;27505:199;;;27655:34;27670:7;27679:6;;27686:1;27679:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27655:14;:34::i;:::-;27637:12;27650:1;27637:15;;;;;;;;:::i;:::-;;;;;;;;;;:52;27544:3;;27505:199;;;;27733:7;-1:-1:-1;;;;;27722:52:2;;27742:9;27753:6;;27761:12;27722:52;;;;;;;;;:::i;:::-;;;;;;;;27225:566;;27096:695;;;;:::o;17169:827::-;17422:13;17367:8;;14373:1489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14373:1489:2;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17377:18:2;;-1:-1:-1;17377:18:2;;;;14373:1489;;;17377:18;;14373:1489;17377:18;14373:1489;;;;;;;;;-1:-1:-1;;14523:15:2;;17397:14;;-1:-1:-1;14541:1:2;-1:-1:-1;14519:77:2;;-1:-1:-1;14519:77:2;;14580:8;:15;14551:45;;-1:-1:-1;;;14551:45:2;;;;;;2370:25:6;;2358:2;2343:18;;2224:177;14519:77:2;14629:18;:25;14610:8;:15;:44;14606:157;;14720:15;;14737:25;;14675:88;;-1:-1:-1;;;14675:88:2;;;;;8373:25:6;;;;8414:18;;;8407:34;8346:18;;14675:88:2;8199:248:6;14606:157:2;12692:3;14844:27;14852:18;14844:7;:27::i;:::-;:47;;;14840:136;;14948:27;14956:18;14948:7;:27::i;14840:136::-;15143:15;;-1:-1:-1;;15143:19:2;15122:18;15176:328;15200:10;15196:1;:14;15176:328;;;15324:8;15333:1;15337;15333:5;15324:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15309:30:2;:8;15318:1;15309:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15309:30:2;;15305:78;;15348:35;;-1:-1:-1;;;15348:35:2;;;;;2370:25:6;;;2343:18;;15348:35:2;2224:177:6;15305:78:2;15437:1;15405:34;;:18;15424:1;15405:21;;;;;;;;:::i;:::-;;;;;;;:34;;;15401:88;;15448:41;;-1:-1:-1;;;15448:41:2;;;;;2370:25:6;;;2343:18;;15448:41:2;2224:177:6;15401:88:2;15212:3;;15176:328;;;;15663:1;15622:43;;:18;15641:10;15622:30;;;;;;;;:::i;:::-;;;;;;;:43;;;15618:106;;15674:50;;-1:-1:-1;;;15674:50:2;;;;;2370:25:6;;;2343:18;;15674:50:2;2224:177:6;15618:106:2;14986:749;12819:3;15748:14;:36;;;15744:100;;;15793:51;;-1:-1:-1;;;15793:51:2;;8626:10:6;8614:23;;15793:51:2;;;8596:42:6;8569:18;;15793:51:2;8452:192:6;15744:100:2;17447:17:::1;17467:56;17478:8;;17467:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;17467:56:2::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;-1:-1:-1;17488:18:2;;-1:-1:-1;17488:18:2;;;;17467:56;::::1;::::0;17488:18;;17467:56;17488:18;17467:56;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;17508:14:2;;-1:-1:-1;17467:10:2::1;::::0;-1:-1:-1;;17467:56:2:i:1;:::-;17447:76:::0;-1:-1:-1;;;;;;17537:24:2;::::1;17533:319;;17623:58;17649:20;17671:9;17623:25;:58::i;:::-;17615:66;;17533:319;;;17756:34;17769:20;17756:12;:34::i;:::-;-1:-1:-1::0;;;;;17804:13:2;;::::1;;::::0;;;:6:::1;:13;::::0;;;;:24:::1;;:37:::0;;-1:-1:-1;;;;;;17804:37:2::1;::::0;;::::1;::::0;;;::::1;::::0;;:13;-1:-1:-1;17533:319:2::1;-1:-1:-1::0;;;;;17926:13:2;::::1;;::::0;;;:6:::1;:13;::::0;;;;;:30;;;17971:18;::::1;::::0;17926:13;17971:18:::1;17437:559;17169:827:::0;;;;;;;;;;;:::o;26230:618::-;-1:-1:-1;;;;;13569:13:2;;;;;;;:6;:13;;;;;:24;;;:13;;:24;13555:10;:38;13551:75;;13602:24;;-1:-1:-1;;;13602:24:2;;13615:10;13602:24;;;3583:51:6;3556:18;;13602:24:2;3437:203:6;13551:75:2;26520:8:::1;;14373:1489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;14373:1489:2::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;-1:-1:-1;26530:18:2;;-1:-1:-1;26530:18:2;;;;14373:1489;::::1;::::0;26530:18;;14373:1489;26530:18;14373:1489;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;14523:15:2;;26550:14;;-1:-1:-1;14541:1:2::1;-1:-1:-1::0;14519:77:2::1;::::0;-1:-1:-1;14519:77:2::1;;14580:8;:15;14551:45;;-1:-1:-1::0;;;14551:45:2::1;;;;;;2370:25:6::0;;2358:2;2343:18;;2224:177;14519:77:2::1;14629:18;:25;14610:8;:15;:44;14606:157;;14720:15:::0;;14737:25;;14675:88:::1;::::0;-1:-1:-1;;;14675:88:2;;::::1;::::0;::::1;8373:25:6::0;;;;8414:18;;;8407:34;8346:18;;14675:88:2::1;8199:248:6::0;14606:157:2::1;12692:3;14844:27;14852:18;14844:7;:27::i;:::-;:47;;;14840:136;;14948:27;14956:18;14948:7;:27::i;14840:136::-;15143:15:::0;;-1:-1:-1;;15143:19:2;15122:18:::1;15176:328;15200:10;15196:1;:14;15176:328;;;15324:8;15333:1;15337;15333:5;15324:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;15309:30:2::1;:8;15318:1;15309:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;15309:30:2::1;;15305:78;;15348:35;::::0;-1:-1:-1;;;15348:35:2;;::::1;::::0;::::1;2370:25:6::0;;;2343:18;;15348:35:2::1;2224:177:6::0;15305:78:2::1;15437:1;15405:34;;:18;15424:1;15405:21;;;;;;;;:::i;:::-;;;;;;;:34;;::::0;15401:88:::1;;15448:41;::::0;-1:-1:-1;;;15448:41:2;;::::1;::::0;::::1;2370:25:6::0;;;2343:18;;15448:41:2::1;2224:177:6::0;15401:88:2::1;15212:3;;15176:328;;;;15663:1;15622:43;;:18;15641:10;15622:30;;;;;;;;:::i;:::-;;;;;;;:43;;::::0;15618:106:::1;;15674:50;::::0;-1:-1:-1;;;15674:50:2;;::::1;::::0;::::1;2370:25:6::0;;;2343:18;;15674:50:2::1;2224:177:6::0;15618:106:2::1;14986:749;12819:3;15748:14;:36;;;15744:100;;;15793:51;::::0;-1:-1:-1;;;15793:51:2;;8626:10:6;8614:23;;15793:51:2::1;::::0;::::1;8596:42:6::0;8569:18;;15793:51:2::1;8452:192:6::0;15744:100:2::1;26576:65:::2;26589:5;26596:8;;26606:18;;26626:14;26576:12;:65::i;:::-;26745:96;26762:5;26769;26776:8;;26745:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26786:18;;26745:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;26806:14:2;;-1:-1:-1;26822:18:2;;-1:-1:-1;26745:16:2::2;::::0;-1:-1:-1;26745:96:2:i:2;:::-;13636:1:::1;;;26230:618:::0;;;;;;;;;:::o;23442:586::-;-1:-1:-1;;;;;13569:13:2;;;;;;;:6;:13;;;;;:24;;;:13;;:24;13555:10;:38;13551:75;;13602:24;;-1:-1:-1;;;13602:24:2;;13615:10;13602:24;;;3583:51:6;3556:18;;13602:24:2;3437:203:6;13551:75:2;23709:8:::1;;14373:1489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;14373:1489:2::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;-1:-1:-1;23719:18:2;;-1:-1:-1;23719:18:2;;;;14373:1489;::::1;::::0;23719:18;;14373:1489;23719:18;14373:1489;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;14523:15:2;;23739:14;;-1:-1:-1;14541:1:2::1;-1:-1:-1::0;14519:77:2::1;::::0;-1:-1:-1;14519:77:2::1;;14580:8;:15;14551:45;;-1:-1:-1::0;;;14551:45:2::1;;;;;;2370:25:6::0;;2358:2;2343:18;;2224:177;14519:77:2::1;14629:18;:25;14610:8;:15;:44;14606:157;;14720:15:::0;;14737:25;;14675:88:::1;::::0;-1:-1:-1;;;14675:88:2;;::::1;::::0;::::1;8373:25:6::0;;;;8414:18;;;8407:34;8346:18;;14675:88:2::1;8199:248:6::0;14606:157:2::1;12692:3;14844:27;14852:18;14844:7;:27::i;:::-;:47;;;14840:136;;14948:27;14956:18;14948:7;:27::i;14840:136::-;15143:15:::0;;-1:-1:-1;;15143:19:2;15122:18:::1;15176:328;15200:10;15196:1;:14;15176:328;;;15324:8;15333:1;15337;15333:5;15324:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;15309:30:2::1;:8;15318:1;15309:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;15309:30:2::1;;15305:78;;15348:35;::::0;-1:-1:-1;;;15348:35:2;;::::1;::::0;::::1;2370:25:6::0;;;2343:18;;15348:35:2::1;2224:177:6::0;15305:78:2::1;15437:1;15405:34;;:18;15424:1;15405:21;;;;;;;;:::i;:::-;;;;;;;:34;;::::0;15401:88:::1;;15448:41;::::0;-1:-1:-1;;;15448:41:2;;::::1;::::0;::::1;2370:25:6::0;;;2343:18;;15448:41:2::1;2224:177:6::0;15401:88:2::1;15212:3;;15176:328;;;;15663:1;15622:43;;:18;15641:10;15622:30;;;;;;;;:::i;:::-;;;;;;;:43;;::::0;15618:106:::1;;15674:50;::::0;-1:-1:-1;;;15674:50:2;;::::1;::::0;::::1;2370:25:6::0;;;2343:18;;15674:50:2::1;2224:177:6::0;15618:106:2::1;14986:749;12819:3;15748:14;:36;;;15744:100;;;15793:51;::::0;-1:-1:-1;;;15793:51:2;;8626:10:6;8614:23;;15793:51:2::1;::::0;::::1;8596:42:6::0;8569:18;;15793:51:2::1;8452:192:6::0;15744:100:2::1;23765:65:::2;23778:5;23785:8;;23795:18;;23815:14;23765:12;:65::i;:::-;23934:87;23949:5;23956:8;;23934:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;23934:87:2::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;-1:-1:-1;23966:18:2;;-1:-1:-1;23966:18:2;;;;23934:87;::::2;::::0;23966:18;;23934:87;23966:18;23934:87;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;23986:14:2;;-1:-1:-1;24002:18:2;;-1:-1:-1;23934:14:2::2;::::0;-1:-1:-1;23934:87:2:i:2;29317:201::-:0;-1:-1:-1;;;;;29454:15:2;;29395:7;29454:15;;;:6;:15;;;;;:20;:25;;:56;;29509:1;29454:56;;;29482:24;;-1:-1:-1;;;29482:24:2;;-1:-1:-1;;;;;3601:32:6;;;29482:24:2;;;3583:51:6;29482:15:2;;;;;3556:18:6;;29482:24:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29421:20:2;;;;;;;:13;:20;;;;;;;;:29;;;;;;;;;;:90;;;;:::i;:::-;29414:97;29317:201;-1:-1:-1;;;29317:201:2:o;21063:277::-;-1:-1:-1;;;;;13896:13:2;;;;;;;:6;:13;;;;;;;;:36;;:13;;:36;13882:10;:50;13878:87;;13941:24;;-1:-1:-1;;;13941:24:2;;13954:10;13941:24;;;3583:51:6;3556:18;;13941:24:2;3437:203:6;13878:87:2;-1:-1:-1;;;;;21175:13:2;;::::1;;::::0;;;:6:::1;:13;::::0;;;;;;;:36;;::::1;21168:43:::0;;-1:-1:-1;;;;;;21168:43:2::1;::::0;;;21249:24;;::::1;::::0;21226:60;;21275:10:::1;::::0;21249:24;;;::::1;::::0;21175:13;21226:60:::1;::::0;::::1;-1:-1:-1::0;;;;;;21296:13:2::1;;::::0;;;:6:::1;:13;::::0;;;;:24:::1;;:37:::0;;-1:-1:-1;;;;;;21296:37:2::1;21323:10;21296:37;::::0;;21063:277::o;20210:307::-;-1:-1:-1;;;;;13569:13:2;;;;;;;:6;:13;;;;;:24;;;:13;;:24;13555:10;:38;13551:75;;13602:24;;-1:-1:-1;;;13602:24:2;;13615:10;13602:24;;;3583:51:6;3556:18;;13602:24:2;3437:203:6;13551:75:2;20369:13;-1:-1:-1;;;;;16066:27:2;::::1;16062:75;;16102:35;::::0;-1:-1:-1;;;16102:35:2;;-1:-1:-1;;;;;3601:32:6;;16102:35:2::1;::::0;::::1;3583:51:6::0;3556:18;;16102:35:2::1;3437:203:6::0;16062:75:2::1;-1:-1:-1::0;;;;;20398:13:2;;::::2;;::::0;;;:6:::2;:13;::::0;;;;;;;:36;;::::2;:52:::0;;-1:-1:-1;;;;;;20398:52:2::2;::::0;;::::2;::::0;;::::2;::::0;;20465:45;::::2;::::0;20398:13;20465:45:::2;13636:1:::1;20210:307:::0;;;:::o;22375:543::-;22606:8;;14373:1489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14373:1489:2;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22616:18:2;;-1:-1:-1;22616:18:2;;;;14373:1489;;;22616:18;;14373:1489;22616:18;14373:1489;;;;;;;;;-1:-1:-1;;14523:15:2;;22636:14;;-1:-1:-1;14541:1:2;-1:-1:-1;14519:77:2;;-1:-1:-1;14519:77:2;;14580:8;:15;14551:45;;-1:-1:-1;;;14551:45:2;;;;;;2370:25:6;;2358:2;2343:18;;2224:177;14519:77:2;14629:18;:25;14610:8;:15;:44;14606:157;;14720:15;;14737:25;;14675:88;;-1:-1:-1;;;14675:88:2;;;;;8373:25:6;;;;8414:18;;;8407:34;8346:18;;14675:88:2;8199:248:6;14606:157:2;12692:3;14844:27;14852:18;14844:7;:27::i;:::-;:47;;;14840:136;;14948:27;14956:18;14948:7;:27::i;14840:136::-;15143:15;;-1:-1:-1;;15143:19:2;15122:18;15176:328;15200:10;15196:1;:14;15176:328;;;15324:8;15333:1;15337;15333:5;15324:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15309:30:2;:8;15318:1;15309:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15309:30:2;;15305:78;;15348:35;;-1:-1:-1;;;15348:35:2;;;;;2370:25:6;;;2343:18;;15348:35:2;2224:177:6;15305:78:2;15437:1;15405:34;;:18;15424:1;15405:21;;;;;;;;:::i;:::-;;;;;;;:34;;;15401:88;;15448:41;;-1:-1:-1;;;15448:41:2;;;;;2370:25:6;;;2343:18;;15448:41:2;2224:177:6;15401:88:2;15212:3;;15176:328;;;;15663:1;15622:43;;:18;15641:10;15622:30;;;;;;;;:::i;:::-;;;;;;;:43;;;15618:106;;15674:50;;-1:-1:-1;;;15674:50:2;;;;;2370:25:6;;;2343:18;;15674:50:2;2224:177:6;15618:106:2;14986:749;12819:3;15748:14;:36;;;15744:100;;;15793:51;;-1:-1:-1;;;15793:51:2;;8626:10:6;8614:23;;15793:51:2;;;8596:42:6;8569:18;;15793:51:2;8452:192:6;15744:100:2;22746:68:::1;22762:5;22769:8;;22746:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;22746:68:2::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;-1:-1:-1;22779:18:2;;-1:-1:-1;22779:18:2;;;;22746:68;::::1;::::0;22779:18;;22746:68;22779:18;22746:68;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;22799:14:2;;-1:-1:-1;22746:15:2::1;::::0;-1:-1:-1;;22746:68:2:i:1;:::-;22824:87;22839:5;22846:8;;22824:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;22824:87:2::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;-1:-1:-1;22856:18:2;;-1:-1:-1;22856:18:2;;;;22824:87;::::1;::::0;22856:18;;22824:87;22856:18;22824:87;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;22876:14:2;;-1:-1:-1;22892:18:2;;-1:-1:-1;22824:14:2::1;::::0;-1:-1:-1;22824:87:2:i:1;:::-;22375:543:::0;;;;;;;;;;:::o;19445:348::-;-1:-1:-1;;;;;13569:13:2;;;;;;;:6;:13;;;;;:24;;;:13;;:24;13555:10;:38;13551:75;;13602:24;;-1:-1:-1;;;13602:24:2;;13615:10;13602:24;;;3583:51:6;3556:18;;13602:24:2;3437:203:6;13551:75:2;19665:8:::1;;14373:1489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;14373:1489:2::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;-1:-1:-1;19675:18:2;;-1:-1:-1;19675:18:2;;;;14373:1489;::::1;::::0;19675:18;;14373:1489;19675:18;14373:1489;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;14523:15:2;;19695:14;;-1:-1:-1;14541:1:2::1;-1:-1:-1::0;14519:77:2::1;::::0;-1:-1:-1;14519:77:2::1;;14580:8;:15;14551:45;;-1:-1:-1::0;;;14551:45:2::1;;;;;;2370:25:6::0;;2358:2;2343:18;;2224:177;14519:77:2::1;14629:18;:25;14610:8;:15;:44;14606:157;;14720:15:::0;;14737:25;;14675:88:::1;::::0;-1:-1:-1;;;14675:88:2;;::::1;::::0;::::1;8373:25:6::0;;;;8414:18;;;8407:34;8346:18;;14675:88:2::1;8199:248:6::0;14606:157:2::1;12692:3;14844:27;14852:18;14844:7;:27::i;:::-;:47;;;14840:136;;14948:27;14956:18;14948:7;:27::i;14840:136::-;15143:15:::0;;-1:-1:-1;;15143:19:2;15122:18:::1;15176:328;15200:10;15196:1;:14;15176:328;;;15324:8;15333:1;15337;15333:5;15324:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;15309:30:2::1;:8;15318:1;15309:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;15309:30:2::1;;15305:78;;15348:35;::::0;-1:-1:-1;;;15348:35:2;;::::1;::::0;::::1;2370:25:6::0;;;2343:18;;15348:35:2::1;2224:177:6::0;15305:78:2::1;15437:1;15405:34;;:18;15424:1;15405:21;;;;;;;;:::i;:::-;;;;;;;:34;;::::0;15401:88:::1;;15448:41;::::0;-1:-1:-1;;;15448:41:2;;::::1;::::0;::::1;2370:25:6::0;;;2343:18;;15448:41:2::1;2224:177:6::0;15401:88:2::1;15212:3;;15176:328;;;;15663:1;15622:43;;:18;15641:10;15622:30;;;;;;;;:::i;:::-;;;;;;;:43;;::::0;15618:106:::1;;15674:50;::::0;-1:-1:-1;;;15674:50:2;;::::1;::::0;::::1;2370:25:6::0;;;2343:18;;15674:50:2::1;2224:177:6::0;15618:106:2::1;14986:749;12819:3;15748:14;:36;;;15744:100;;;15793:51;::::0;-1:-1:-1;;;15793:51:2;;8626:10:6;8614:23;;15793:51:2::1;::::0;::::1;8596:42:6::0;8569:18;;15793:51:2::1;8452:192:6::0;15744:100:2::1;19721:65:::2;19734:5;19741:8;;19751:18;;19771:14;19721:12;:65::i;29710:409::-:0;29880:14;;29775:10;;;29904:209;29928:13;29924:1;:17;29904:209;;;29966:7;29974:1;29966:10;;;;;;;;:::i;:::-;;;;;;;29959:17;;;;;:::i;:::-;;-1:-1:-1;30085:3:2;;29904:209;;;;29787:332;29710:409;;;:::o;32066:346::-;32254:12;32269:56;32280:8;32290:18;32310:14;32269:10;:56::i;:::-;-1:-1:-1;;;;;32339:13:2;;;;;;:6;:13;;;;;:18;32254:71;;-1:-1:-1;32339:26:2;;32335:70;;32374:31;;-1:-1:-1;;;32374:31:2;;;;;2370:25:6;;;2343:18;;32374:31:2;2224:177:6;32335:70:2;32244:168;32066:346;;;;:::o;36386:2616::-;-1:-1:-1;;;;;36680:20:2;;;36627:21;36680:20;;;:13;:20;;;;;;;;:27;;;;;;;;;;;;;;36740:22;;-1:-1:-1;;;36740:22:2;;;;;3583:51:6;;;;36627:21:2;;36680:27;;36627:21;;36740:15;;3556:18:6;;36740:22:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36717:45;-1:-1:-1;36933:16:2;;36929:39;;-1:-1:-1;;36951:17:2;36929:39;37032:15;;37028:70;;37082:1;37067:16;;;;37028:70;37172:26;;;;-1:-1:-1;37222:15:2;;37218:52;;-1:-1:-1;;;;;37239:20:2;;;;;;;37269:1;37239:20;;;;;;;;:27;;;;;;;;;;;:31;37218:52;37411:18;-1:-1:-1;;;;;37366:64:2;37389:5;-1:-1:-1;;;;;37366:64:2;37382:5;-1:-1:-1;;;;;37366:64:2;;37396:13;37366:64;;;;2370:25:6;;2358:2;2343:18;;2224:177;37366:64:2;;;;;;;;37444:19;;;;37440:663;;-1:-1:-1;;;;;37783:20:2;;;37538:28;37783:20;;;:13;:20;;;;;39808:16;37569:55;;;39780:26;;39776:49;;;;37538:28;37825:32;;:66;;37881:10;37825:66;;;37860:18;37825:66;-1:-1:-1;;;;;37783:126:2;;;;;;;;;;;;-1:-1:-1;37783:126:2;:150;;;;;;;38041:37;;;;37440:663;38331:15;;38306:22;38360:177;38384:14;38380:1;:18;38360:177;;;38460:62;38485:13;38500:18;38519:1;38500:21;;;;;;;;:::i;:::-;;;;;;;38460:62;;39808:16;39780:26;;39776:49;;39248:593;38460:62;-1:-1:-1;;;;;38423:20:2;;;;;;:13;:20;;;;;38444:11;;38423:20;;;38444:8;;38453:1;;38444:11;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;38423:33:2;;;;;;;;;;;-1:-1:-1;38423:33:2;:99;;;;;;;-1:-1:-1;38400:3:2;38360:177;;;-1:-1:-1;;38922:16:2;;38918:77;;38940:55;;-1:-1:-1;;;38940:55:2;;-1:-1:-1;;;;;11377:32:6;;;38940:55:2;;;11359:51:6;11426:18;;;11419:34;;;38940::2;;;;;11332:18:6;;38940:55:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38918:77;36617:2385;;;36386:2616;;;;;;:::o;30471:265::-;30630:7;30683:8;30693:18;30713:14;30666:62;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30656:73;;;;;;30649:80;;30471:265;;;;;:::o;6536:233:5:-;6658:17;6698:64;6726:14;6742:4;6756;5731;5725:11;-1:-1:-1;;;5749:79:5;;5864:66;5857:4;5848:14;;5841:90;-1:-1:-1;;;5960:4:5;5951:14;;5944:90;6074:4;6070:25;;;6063:4;6054:14;;6047:49;-1:-1:-1;;;6125:4:5;6116:14;;6109:90;6235:19;;6228:4;6219:14;;6212:43;6284:4;6275:14;;6268:28;6347:4;6332:20;;;6325:4;6316:14;;6309:44;6405:4;6389:14;;6379:31;;5516:910;40008:293:2;-1:-1:-1;;;;;40192:20:2;;40062:17;40192:20;;;;;;;;;;;:24;;40215:1;;40192:24;:::i;:::-;-1:-1:-1;;;;;40226:20:2;;:11;:20;;;;;;;;;;40249:1;40226:24;;40180:36;;-1:-1:-1;40260:34:2;;40180:36;40260:23;:34::i;:::-;40008:293;;;:::o;40498:335::-;-1:-1:-1;;;;;40702:20:2;;;40570:17;40702:20;;;40734:1;40702:20;;;;;;;;:29;;;;;;;;;;;;40570:17;;40702:33;;;:::i;:::-;-1:-1:-1;;;;;40745:20:2;;;;;;;40777:1;40745:20;;;;;;;;:29;;;;;;;;;;;:33;;;;40690:45;;-1:-1:-1;40788:38:2;;40766:7;40690:45;40788:18;:38::i;4659:747:5:-;4743:16;4811:4;4805:11;-1:-1:-1;;;4836:3:5;4829:79;4944:66;4937:4;4932:3;4928:14;4921:90;-1:-1:-1;;;5040:4:5;5035:3;5031:14;5024:90;5160:14;5154:4;5150:25;5143:4;5138:3;5134:14;5127:49;-1:-1:-1;;;5205:4:5;5200:3;5196:14;5189:90;5326:4;5320;5315:3;5312:1;5304:27;5292:39;-1:-1:-1;;;;;;;5354:22:5;;5350:49;;5385:14;;-1:-1:-1;;;5385:14:5;;;;;;;;;;;3941:712;3998:16;4066:4;4060:11;-1:-1:-1;;;4091:3:5;4084:79;4199:66;4192:4;4187:3;4183:14;4176:90;-1:-1:-1;;;4295:4:5;4290:3;4286:14;4279:90;4415:14;4409:4;4405:25;4398:4;4393:3;4389:14;4382:49;-1:-1:-1;;;4460:4:5;4455:3;4451:14;4444:90;4574:4;4569:3;4566:1;4559:20;4547:32;-1:-1:-1;;;;;;;4602:22:5;;4598:48;;4633:13;;-1:-1:-1;;;4633:13:5;;;;;;;;;;;31222:401:2;31406:17;31426:56;31437:8;;31426:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31426:56:2;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31447:18:2;;-1:-1:-1;31447:18:2;;;;31426:56;;;31447:18;;31426:56;31447:18;31426:56;;;;;;;;;-1:-1:-1;31467:14:2;;-1:-1:-1;31426:10:2;;-1:-1:-1;;31426:56:2:i;:::-;-1:-1:-1;;;;;31553:13:2;;;;;;:6;:13;;;;;;:30;;;31598:18;31406:76;;-1:-1:-1;31553:13:2;;31598:18;;31553:13;31598:18;31396:227;31222:401;;;;;;:::o;32980:2603::-;-1:-1:-1;;;;;33220:18:2;;33198:19;33220:18;;;;;;;;;;;;33271:13;;33478:15;;33474:37;;33510:1;33495:16;;;;33474:37;-1:-1:-1;33586:26:2;;;33636:15;;33632:43;;-1:-1:-1;;;;;33653:18:2;;:11;:18;;;;;;;;;;33674:1;33653:22;;33632:43;33807:18;-1:-1:-1;;;;;33771:55:2;33785:5;-1:-1:-1;;;;;33771:55:2;;33792:13;33771:55;;;;2370:25:6;;2358:2;2343:18;;2224:177;33771:55:2;;;;;;;;33840:19;;;;33836:700;;39808:16;33965:55;;;39780:26;;39776:49;;33934:28;;-1:-1:-1;;;;;34195:32:2;;:66;;34251:10;34195:66;;;34230:18;34195:66;-1:-1:-1;;;;;34183:79:2;;;;;;;;;;;;-1:-1:-1;34183:79:2;:103;;;;;;;34474:37;;33836:700;34750:15;;34725:22;34779:244;34803:14;34799:1;:18;34779:244;;;34946:62;34971:13;34986:18;35005:1;34986:21;;;;;;;;:::i;34946:62::-;34918:11;:24;34930:8;34939:1;34930:11;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;34918:24:2;;;;;;;;;;;-1:-1:-1;34918:24:2;:90;;;;;;;-1:-1:-1;34819:3:2;34779:244;;;-1:-1:-1;;35512:16:2;;35508:68;;35530:46;;-1:-1:-1;;;35530:46:2;;;;;2370:25:6;;;-1:-1:-1;;;;;35530:32:2;;;;;2343:18:6;;35530:46:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35508:68;33188:2395;;;32980:2603;;;;;:::o;796:296:1:-;868:12;1024:1;1021;1018;1015;1007:6;1003:2;996:5;991:35;980:46;;1054:7;1046:39;;;;-1:-1:-1;;;1046:39:1;;12911:2:6;1046:39:1;;;12893:21:6;12950:2;12930:18;;;12923:30;-1:-1:-1;;;12969:18:6;;;12962:49;13028:18;;1046:39:1;12709:343:6;1046:39:1;858:234;796:296;;:::o;2861:1456::-;2973:12;3100:4;3094:11;-1:-1:-1;;;3223:17:1;3216:93;3356:2;3352:1;3333:17;3329:25;3322:37;3436:6;3431:2;3412:17;3408:26;3401:42;4238:2;4235:1;4231:2;4212:17;4209:1;4202:5;4195;4190:51;3759:16;3752:24;3746:2;3728:16;3725:24;3721:1;3717;3711:8;3708:15;3704:46;3701:76;3501:754;3490:765;;;4283:7;4275:35;;;;-1:-1:-1;;;4275:35:1;;13259:2:6;4275:35:1;;;13241:21:6;13298:2;13278:18;;;13271:30;-1:-1:-1;;;13317:18:6;;;13310:45;13372:18;;4275:35:1;13057:339:6;4275:35:1;2963:1354;2861:1456;;;:::o;14:131:6:-;-1:-1:-1;;;;;89:31:6;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:247::-;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:367::-;465:8;475:6;529:3;522:4;514:6;510:17;506:27;496:55;;547:1;544;537:12;496:55;-1:-1:-1;570:20:6;;613:18;602:30;;599:50;;;645:1;642;635:12;599:50;682:4;674:6;670:17;658:29;;742:3;735:4;725:6;722:1;718:14;710:6;706:27;702:38;699:47;696:67;;;759:1;756;749:12;696:67;402:367;;;;;:::o;774:163::-;841:20;;901:10;890:22;;880:33;;870:61;;927:1;924;917:12;942:1277;1111:6;1119;1127;1135;1143;1151;1159;1167;1220:3;1208:9;1199:7;1195:23;1191:33;1188:53;;;1237:1;1234;1227:12;1188:53;1276:9;1263:23;1295:31;1320:5;1295:31;:::i;:::-;1345:5;-1:-1:-1;1402:2:6;1387:18;;1374:32;1415:33;1374:32;1415:33;:::i;:::-;1467:7;-1:-1:-1;1525:2:6;1510:18;;1497:32;1548:18;1578:14;;;1575:34;;;1605:1;1602;1595:12;1575:34;1644:70;1706:7;1697:6;1686:9;1682:22;1644:70;:::i;:::-;1733:8;;-1:-1:-1;1618:96:6;-1:-1:-1;1821:2:6;1806:18;;1793:32;;-1:-1:-1;1837:16:6;;;1834:36;;;1866:1;1863;1856:12;1834:36;;1905:72;1969:7;1958:8;1947:9;1943:24;1905:72;:::i;:::-;1996:8;;-1:-1:-1;1879:98:6;-1:-1:-1;2050:38:6;;-1:-1:-1;2083:3:6;2068:19;;2050:38;:::i;:::-;2040:48;;2140:3;2129:9;2125:19;2112:33;2154;2179:7;2154:33;:::i;:::-;2206:7;2196:17;;;942:1277;;;;;;;;;;;:::o;2588:844::-;2717:6;2725;2733;2741;2749;2802:2;2790:9;2781:7;2777:23;2773:32;2770:52;;;2818:1;2815;2808:12;2770:52;2858:9;2845:23;2887:18;2928:2;2920:6;2917:14;2914:34;;;2944:1;2941;2934:12;2914:34;2983:70;3045:7;3036:6;3025:9;3021:22;2983:70;:::i;:::-;3072:8;;-1:-1:-1;2957:96:6;-1:-1:-1;3160:2:6;3145:18;;3132:32;;-1:-1:-1;3176:16:6;;;3173:36;;;3205:1;3202;3195:12;3173:36;;3244:72;3308:7;3297:8;3286:9;3282:24;3244:72;:::i;:::-;3335:8;;-1:-1:-1;3218:98:6;-1:-1:-1;3389:37:6;;-1:-1:-1;3422:2:6;3407:18;;3389:37;:::i;:::-;3379:47;;2588:844;;;;;;;;:::o;3645:653::-;3762:6;3770;3778;3786;3839:2;3827:9;3818:7;3814:23;3810:32;3807:52;;;3855:1;3852;3845:12;3807:52;3894:9;3881:23;3913:31;3938:5;3913:31;:::i;:::-;3963:5;-1:-1:-1;4015:2:6;4000:18;;3987:32;;-1:-1:-1;4070:2:6;4055:18;;4042:32;4097:18;4086:30;;4083:50;;;4129:1;4126;4119:12;4083:50;4168:70;4230:7;4221:6;4210:9;4206:22;4168:70;:::i;:::-;3645:653;;;;-1:-1:-1;4257:8:6;-1:-1:-1;;;;3645:653:6:o;4303:980::-;4441:6;4449;4457;4465;4473;4481;4534:3;4522:9;4513:7;4509:23;4505:33;4502:53;;;4551:1;4548;4541:12;4502:53;4591:9;4578:23;4620:18;4661:2;4653:6;4650:14;4647:34;;;4677:1;4674;4667:12;4647:34;4716:70;4778:7;4769:6;4758:9;4754:22;4716:70;:::i;:::-;4805:8;;-1:-1:-1;4690:96:6;-1:-1:-1;4893:2:6;4878:18;;4865:32;;-1:-1:-1;4909:16:6;;;4906:36;;;4938:1;4935;4928:12;4906:36;;4977:72;5041:7;5030:8;5019:9;5015:24;4977:72;:::i;:::-;5068:8;;-1:-1:-1;4951:98:6;-1:-1:-1;5122:37:6;;-1:-1:-1;5155:2:6;5140:18;;5122:37;:::i;:::-;5112:47;;5209:2;5198:9;5194:18;5181:32;5222:31;5247:5;5222:31;:::i;:::-;5272:5;5262:15;;;4303:980;;;;;;;;:::o;5288:1122::-;5435:6;5443;5451;5459;5467;5475;5483;5536:3;5524:9;5515:7;5511:23;5507:33;5504:53;;;5553:1;5550;5543:12;5504:53;5592:9;5579:23;5611:31;5636:5;5611:31;:::i;:::-;5661:5;-1:-1:-1;5717:2:6;5702:18;;5689:32;5740:18;5770:14;;;5767:34;;;5797:1;5794;5787:12;5767:34;5836:70;5898:7;5889:6;5878:9;5874:22;5836:70;:::i;:::-;5925:8;;-1:-1:-1;5810:96:6;-1:-1:-1;6013:2:6;5998:18;;5985:32;;-1:-1:-1;6029:16:6;;;6026:36;;;6058:1;6055;6048:12;6026:36;;6097:72;6161:7;6150:8;6139:9;6135:24;6097:72;:::i;:::-;6188:8;;-1:-1:-1;6071:98:6;-1:-1:-1;6242:37:6;;-1:-1:-1;6275:2:6;6260:18;;6242:37;:::i;:::-;6232:47;;6331:3;6320:9;6316:19;6303:33;6345;6370:7;6345:33;:::i;:::-;6397:7;6387:17;;;5288:1122;;;;;;;;;;:::o;6415:401::-;6496:6;6504;6557:2;6545:9;6536:7;6532:23;6528:32;6525:52;;;6573:1;6570;6563:12;6525:52;6612:9;6599:23;6631:31;6656:5;6631:31;:::i;:::-;6681:5;-1:-1:-1;6738:2:6;6723:18;;6710:32;6751:33;6710:32;6751:33;:::i;:::-;6803:7;6793:17;;;6415:401;;;;;:::o;7214:980::-;7352:6;7360;7368;7376;7384;7392;7445:3;7433:9;7424:7;7420:23;7416:33;7413:53;;;7462:1;7459;7452:12;7413:53;7501:9;7488:23;7520:31;7545:5;7520:31;:::i;:::-;7570:5;-1:-1:-1;7626:2:6;7611:18;;7598:32;7649:18;7679:14;;;7676:34;;;7706:1;7703;7696:12;7676:34;7745:70;7807:7;7798:6;7787:9;7783:22;7745:70;:::i;:::-;7834:8;;-1:-1:-1;7719:96:6;-1:-1:-1;7922:2:6;7907:18;;7894:32;;-1:-1:-1;7938:16:6;;;7935:36;;;7967:1;7964;7957:12;7935:36;;8006:72;8070:7;8059:8;8048:9;8044:24;8006:72;:::i;:::-;8097:8;;-1:-1:-1;7980:98:6;-1:-1:-1;8151:37:6;;-1:-1:-1;8184:2:6;8169:18;;8151:37;:::i;:::-;8141:47;;7214:980;;;;;;;;:::o;8649:127::-;8710:10;8705:3;8701:20;8698:1;8691:31;8741:4;8738:1;8731:15;8765:4;8762:1;8755:15;8781:127;8842:10;8837:3;8833:20;8830:1;8823:31;8873:4;8870:1;8863:15;8897:4;8894:1;8887:15;8913:128;8953:3;8984:1;8980:6;8977:1;8974:13;8971:39;;;8990:18;;:::i;:::-;-1:-1:-1;9026:9:6;;8913:128::o;9046:127::-;9107:10;9102:3;9098:20;9095:1;9088:31;9138:4;9135:1;9128:15;9162:4;9159:1;9152:15;9443:1302;9774:25;;;9762:2;9818;9836:18;;;9829:30;;;9747:18;;;9894:22;;;9714:4;;9974:6;;9947:3;9932:19;;9714:4;10008:277;10022:6;10019:1;10016:13;10008:277;;;10097:6;10084:20;10117:31;10142:5;10117:31;:::i;:::-;-1:-1:-1;;;;;10173:31:6;10161:44;;10260:15;;;;10225:12;;;;10201:1;10037:9;10008:277;;;-1:-1:-1;10321:19:6;;;10316:2;10301:18;;10294:47;10389:13;;10411:19;;;10448:12;;;;-1:-1:-1;10485:15:6;;;;10520:1;10530:187;10546:6;10541:3;10538:15;10530:187;;;10613:15;;10599:30;;10651:14;;;;10690:17;;;;10572:1;10563:11;10530:187;;;-1:-1:-1;10734:5:6;;9443:1302;-1:-1:-1;;;;;;;;;9443:1302:6:o;10750:184::-;10820:6;10873:2;10861:9;10852:7;10848:23;10844:32;10841:52;;;10889:1;10886;10879:12;10841:52;-1:-1:-1;10912:16:6;;10750:184;-1:-1:-1;10750:184:6:o;10939:228::-;10978:3;11006:10;11043:2;11040:1;11036:10;11073:2;11070:1;11066:10;11104:3;11100:2;11096:12;11091:3;11088:21;11085:47;;;11112:18;;:::i;:::-;11148:13;;10939:228;-1:-1:-1;;;;10939:228:6:o;11464:1110::-;11784:13;;11727:3;;11758;;11837:4;11864:15;;;11727:3;11907:201;11921:6;11918:1;11915:13;11907:201;;;11988:13;;-1:-1:-1;;;;;11984:39:6;11970:54;;12046:14;;;;12083:15;;;;12020:1;11936:9;11907:201;;;-1:-1:-1;;12160:13:6;;12221:15;;;;12130:5;-1:-1:-1;12256:1:6;12266:206;12282:8;12277:3;12274:17;12266:206;;;12355:15;;12372:10;12351:32;12337:47;;12445:17;;;;12406:14;;;;12310:1;12301:11;12266:206;;;-1:-1:-1;;;12521:3:6;12499:16;;;;-1:-1:-1;;;;;;12495:43:6;12481:58;;-1:-1:-1;;12566:1:6;12555:13;;;;11464:1110;-1:-1:-1;;;11464:1110:6:o;12579:125::-;12619:4;12647:1;12644;12641:8;12638:34;;;12652:18;;:::i;:::-;-1:-1:-1;12689:9:6;;12579:125::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "2361400",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "PERCENTAGE_SCALE()": "229",
                "acceptControl(address)": "55238",
                "cancelControlTransfer(address)": "28023",
                "createSplit(address[],uint32[],uint32,address)": "infinite",
                "distributeERC20(address,address,address[],uint32[],uint32,address)": "infinite",
                "distributeETH(address,address[],uint32[],uint32,address)": "infinite",
                "getController(address)": "2634",
                "getERC20Balance(address,address)": "infinite",
                "getETHBalance(address)": "7470",
                "getHash(address)": "2610",
                "getNewPotentialController(address)": "2639",
                "makeSplitImmutable(address)": "55271",
                "predictImmutableSplitAddress(address[],uint32[],uint32)": "infinite",
                "transferControl(address,address)": "infinite",
                "updateAndDistributeERC20(address,address,address[],uint32[],uint32,address)": "infinite",
                "updateAndDistributeETH(address,address[],uint32[],uint32,address)": "infinite",
                "updateSplit(address,address[],uint32[],uint32)": "infinite",
                "walletImplementation()": "infinite",
                "withdraw(address,uint256,address[])": "infinite"
              },
              "internal": {
                "_distributeERC20(address,contract ERC20,address[] memory,uint32[] memory,uint32,address)": "infinite",
                "_distributeETH(address,address[] memory,uint32[] memory,uint32,address)": "infinite",
                "_getSum(uint32[] memory)": "infinite",
                "_hashSplit(address[] memory,uint32[] memory,uint32)": "infinite",
                "_scaleAmountByPercentage(uint256,uint256)": "infinite",
                "_updateSplit(address,address[] calldata,uint32[] calldata,uint32)": "infinite",
                "_validSplitHash(address,address[] memory,uint32[] memory,uint32)": "infinite",
                "_withdraw(address)": "infinite",
                "_withdrawERC20(address,contract ERC20)": "infinite"
              }
            },
            "methodIdentifiers": {
              "PERCENTAGE_SCALE()": "3f26479e",
              "acceptControl(address)": "c7de6440",
              "cancelControlTransfer(address)": "1267c6da",
              "createSplit(address[],uint32[],uint32,address)": "7601f782",
              "distributeERC20(address,address,address[],uint32[],uint32,address)": "15811302",
              "distributeETH(address,address[],uint32[],uint32,address)": "e61cb05e",
              "getController(address)": "88c662aa",
              "getERC20Balance(address,address)": "c3a8962c",
              "getETHBalance(address)": "3bb66a7b",
              "getHash(address)": "1da0b8fc",
              "getNewPotentialController(address)": "e10e51d6",
              "makeSplitImmutable(address)": "189cbaa0",
              "predictImmutableSplitAddress(address[],uint32[],uint32)": "52844dd3",
              "transferControl(address,address)": "d0e4b2f4",
              "updateAndDistributeERC20(address,address,address[],uint32[],uint32,address)": "77b1e4e9",
              "updateAndDistributeETH(address,address[],uint32[],uint32,address)": "a5e3909e",
              "updateSplit(address,address[],uint32[],uint32)": "ecef0ace",
              "walletImplementation()": "8117abc1",
              "withdraw(address,uint256,address[])": "6e5f6919"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.14+commit.80d49f37\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Create2Error\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreateError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newController\",\"type\":\"address\"}],\"name\":\"InvalidNewController\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"accountsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"allocationsLength\",\"type\":\"uint256\"}],\"name\":\"InvalidSplit__AccountsAndAllocationsMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"InvalidSplit__AccountsOutOfOrder\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"InvalidSplit__AllocationMustBePositive\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"allocationsSum\",\"type\":\"uint32\"}],\"name\":\"InvalidSplit__InvalidAllocationsSum\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"distributorFee\",\"type\":\"uint32\"}],\"name\":\"InvalidSplit__InvalidDistributorFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"InvalidSplit__InvalidHash\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"accountsLength\",\"type\":\"uint256\"}],\"name\":\"InvalidSplit__TooFewAccounts\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"name\":\"CancelControlTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousController\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newController\",\"type\":\"address\"}],\"name\":\"ControlTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"name\":\"CreateSplit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract ERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"distributorAddress\",\"type\":\"address\"}],\"name\":\"DistributeERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"distributorAddress\",\"type\":\"address\"}],\"name\":\"DistributeETH\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newPotentialController\",\"type\":\"address\"}],\"name\":\"InitiateControlTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"name\":\"UpdateSplit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"contract ERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"PERCENTAGE_SCALE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"name\":\"acceptControl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"name\":\"cancelControlTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"percentAllocations\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32\",\"name\":\"distributorFee\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"createSplit\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"internalType\":\"contract ERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"percentAllocations\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32\",\"name\":\"distributorFee\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"distributorAddress\",\"type\":\"address\"}],\"name\":\"distributeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"percentAllocations\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32\",\"name\":\"distributorFee\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"distributorAddress\",\"type\":\"address\"}],\"name\":\"distributeETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"name\":\"getController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract ERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getERC20Balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getETHBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"name\":\"getHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"name\":\"getNewPotentialController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"name\":\"makeSplitImmutable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"percentAllocations\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32\",\"name\":\"distributorFee\",\"type\":\"uint32\"}],\"name\":\"predictImmutableSplitAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newController\",\"type\":\"address\"}],\"name\":\"transferControl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"internalType\":\"contract ERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"percentAllocations\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32\",\"name\":\"distributorFee\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"distributorAddress\",\"type\":\"address\"}],\"name\":\"updateAndDistributeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"percentAllocations\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32\",\"name\":\"distributorFee\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"distributorAddress\",\"type\":\"address\"}],\"name\":\"updateAndDistributeETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"percentAllocations\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32\",\"name\":\"distributorFee\",\"type\":\"uint32\"}],\"name\":\"updateSplit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"walletImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"withdrawETH\",\"type\":\"uint256\"},{\"internalType\":\"contract ERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"0xSplits <will@0xSplits.xyz>\",\"details\":\"Split recipients, ownerships, and keeper fees are stored onchain as calldata & re-passed as args / validated via hashing when needed. Each split gets its own address & proxy for maximum composability with other contracts onchain. For these proxies, we extended EIP-1167 Minimal Proxy Contract to avoid `DELEGATECALL` inside `receive()` to accept hard gas-capped `sends` & `transfers`.\",\"errors\":{\"InvalidNewController(address)\":[{\"params\":{\"newController\":\"Invalid new controller\"}}],\"InvalidSplit__AccountsAndAllocationsMismatch(uint256,uint256)\":[{\"params\":{\"accountsLength\":\"Length of accounts array\",\"allocationsLength\":\"Length of percentAllocations array\"}}],\"InvalidSplit__AccountsOutOfOrder(uint256)\":[{\"params\":{\"index\":\"Index of out-of-order account\"}}],\"InvalidSplit__AllocationMustBePositive(uint256)\":[{\"params\":{\"index\":\"Index of zero percentAllocation\"}}],\"InvalidSplit__InvalidAllocationsSum(uint32)\":[{\"params\":{\"allocationsSum\":\"Sum of percentAllocations array\"}}],\"InvalidSplit__InvalidDistributorFee(uint32)\":[{\"params\":{\"distributorFee\":\"Invalid distributorFee amount\"}}],\"InvalidSplit__InvalidHash(bytes32)\":[{\"params\":{\"hash\":\"Invalid hash\"}}],\"InvalidSplit__TooFewAccounts(uint256)\":[{\"params\":{\"accountsLength\":\"Length of accounts array\"}}],\"Unauthorized(address)\":[{\"params\":{\"sender\":\"Transaction sender\"}}]},\"kind\":\"dev\",\"methods\":{\"acceptControl(address)\":{\"params\":{\"split\":\"Address of mutable split to accept control transfer for\"}},\"cancelControlTransfer(address)\":{\"params\":{\"split\":\"Address of mutable split to cancel control transfer for\"}},\"createSplit(address[],uint32[],uint32,address)\":{\"params\":{\"accounts\":\"Ordered, unique list of addresses with ownership in the split\",\"controller\":\"Controlling address (0x0 if immutable)\",\"distributorFee\":\"Keeper fee paid by split to cover gas costs of distribution\",\"percentAllocations\":\"Percent allocations associated with each address\"},\"returns\":{\"split\":\"Address of newly created split\"}},\"distributeERC20(address,address,address[],uint32[],uint32,address)\":{\"details\":\"`accounts`, `percentAllocations`, and `distributorFee` are verified by hashing  & comparing to the hash in storage associated with split `split`pernicious ERC20s may cause overflow in this function inside  _scaleAmountByPercentage, but results do not affect ETH & other ERC20 balances\",\"params\":{\"accounts\":\"Ordered, unique list of addresses with ownership in the split\",\"distributorAddress\":\"Address to pay `distributorFee` to\",\"distributorFee\":\"Keeper fee paid by split to cover gas costs of distribution\",\"percentAllocations\":\"Percent allocations associated with each address\",\"split\":\"Address of split to distribute balance for\",\"token\":\"Address of ERC20 to distribute balance for\"}},\"distributeETH(address,address[],uint32[],uint32,address)\":{\"details\":\"`accounts`, `percentAllocations`, and `distributorFee` are verified by hashing  & comparing to the hash in storage associated with split `split`\",\"params\":{\"accounts\":\"Ordered, unique list of addresses with ownership in the split\",\"distributorAddress\":\"Address to pay `distributorFee` to\",\"distributorFee\":\"Keeper fee paid by split to cover gas costs of distribution\",\"percentAllocations\":\"Percent allocations associated with each address\",\"split\":\"Address of split to distribute balance for\"}},\"getController(address)\":{\"params\":{\"split\":\"Split to return controller for\"},\"returns\":{\"_0\":\"Split's controller\"}},\"getERC20Balance(address,address)\":{\"params\":{\"account\":\"Account to return ERC20 `token` balance for\",\"token\":\"Token to return balance for\"},\"returns\":{\"_0\":\"Account's balance of `token`\"}},\"getETHBalance(address)\":{\"params\":{\"account\":\"Account to return ETH balance for\"},\"returns\":{\"_0\":\"Account's balance of ETH\"}},\"getHash(address)\":{\"params\":{\"split\":\"Split to return hash for\"},\"returns\":{\"_0\":\"Split's hash\"}},\"getNewPotentialController(address)\":{\"params\":{\"split\":\"Split to return newPotentialController for\"},\"returns\":{\"_0\":\"Split's newPotentialController\"}},\"makeSplitImmutable(address)\":{\"params\":{\"split\":\"Address of mutable split to turn immutable\"}},\"predictImmutableSplitAddress(address[],uint32[],uint32)\":{\"params\":{\"accounts\":\"Ordered, unique list of addresses with ownership in the split\",\"distributorFee\":\"Keeper fee paid by split to cover gas costs of distribution\",\"percentAllocations\":\"Percent allocations associated with each address\"},\"returns\":{\"split\":\"Predicted address of such an immutable split\"}},\"transferControl(address,address)\":{\"details\":\"Two-step control transfer inspired by [dharma](https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/helpers/TwoStepOwnable.sol)\",\"params\":{\"newController\":\"Address to begin transferring control to\",\"split\":\"Address of mutable split to transfer control for\"}},\"updateAndDistributeERC20(address,address,address[],uint32[],uint32,address)\":{\"details\":\"only callable by SplitControllerpernicious ERC20s may cause overflow in this function inside  _scaleAmountByPercentage, but results do not affect ETH & other ERC20 balances\",\"params\":{\"accounts\":\"Ordered, unique list of addresses with ownership in the split\",\"distributorAddress\":\"Address to pay `distributorFee` to\",\"distributorFee\":\"Keeper fee paid by split to cover gas costs of distribution\",\"percentAllocations\":\"Percent allocations associated with each address\",\"split\":\"Address of split to distribute balance for\",\"token\":\"Address of ERC20 to distribute balance for\"}},\"updateAndDistributeETH(address,address[],uint32[],uint32,address)\":{\"details\":\"only callable by SplitController\",\"params\":{\"accounts\":\"Ordered, unique list of addresses with ownership in the split\",\"distributorAddress\":\"Address to pay `distributorFee` to\",\"distributorFee\":\"Keeper fee paid by split to cover gas costs of distribution\",\"percentAllocations\":\"Percent allocations associated with each address\",\"split\":\"Address of split to distribute balance for\"}},\"updateSplit(address,address[],uint32[],uint32)\":{\"params\":{\"accounts\":\"Ordered, unique list of addresses with ownership in the split\",\"distributorFee\":\"Keeper fee paid by split to cover gas costs of distribution\",\"percentAllocations\":\"Percent allocations associated with each address\",\"split\":\"Address of mutable split to update\"}},\"withdraw(address,uint256,address[])\":{\"params\":{\"account\":\"Address to withdraw on behalf of\",\"tokens\":\"Addresses of ERC20s to withdraw\",\"withdrawETH\":\"Withdraw all ETH if nonzero\"}}},\"title\":\"SplitMain\",\"version\":1},\"userdoc\":{\"errors\":{\"Create2Error()\":[{\"notice\":\"create2 opcode failed\"}],\"CreateError()\":[{\"notice\":\"create opcode failed\"}],\"InvalidNewController(address)\":[{\"notice\":\"Invalid new controlling address `newController` for mutable split\"}],\"InvalidSplit__AccountsAndAllocationsMismatch(uint256,uint256)\":[{\"notice\":\"Array lengths of accounts & percentAllocations don't match (`accountsLength` != `allocationsLength`)\"}],\"InvalidSplit__AccountsOutOfOrder(uint256)\":[{\"notice\":\"Invalid accounts ordering at `index`\"}],\"InvalidSplit__AllocationMustBePositive(uint256)\":[{\"notice\":\"Invalid percentAllocation of zero at `index`\"}],\"InvalidSplit__InvalidAllocationsSum(uint32)\":[{\"notice\":\"Invalid percentAllocations sum `allocationsSum` must equal `PERCENTAGE_SCALE`\"}],\"InvalidSplit__InvalidDistributorFee(uint32)\":[{\"notice\":\"Invalid distributorFee `distributorFee` cannot be greater than 10% (1e5)\"}],\"InvalidSplit__InvalidHash(bytes32)\":[{\"notice\":\"Invalid hash `hash` from split data (accounts, percentAllocations, distributorFee)\"}],\"InvalidSplit__TooFewAccounts(uint256)\":[{\"notice\":\"Invalid number of accounts `accountsLength`, must have at least 2\"}],\"Unauthorized(address)\":[{\"notice\":\"Unauthorized sender `sender`\"}]},\"events\":{\"CancelControlTransfer(address)\":{\"notice\":\"emitted after each canceled split control transfer\"},\"ControlTransfer(address,address,address)\":{\"notice\":\"emitted after each successful split control transfer\"},\"CreateSplit(address)\":{\"notice\":\"emitted after each successful split creation\"},\"DistributeERC20(address,address,uint256,address)\":{\"notice\":\"emitted after each successful ERC20 balance split\"},\"DistributeETH(address,uint256,address)\":{\"notice\":\"emitted after each successful ETH balance split\"},\"InitiateControlTransfer(address,address)\":{\"notice\":\"emitted after each initiated split control transfer\"},\"UpdateSplit(address)\":{\"notice\":\"emitted after each successful split update\"},\"Withdrawal(address,uint256,address[],uint256[])\":{\"notice\":\"emitted after each successful withdrawal\"}},\"kind\":\"user\",\"methods\":{\"PERCENTAGE_SCALE()\":{\"notice\":\"constant to scale uints into percentages (1e6 == 100%)\"},\"acceptControl(address)\":{\"notice\":\"Accepts transfer of the controlling address of mutable split `split`\"},\"cancelControlTransfer(address)\":{\"notice\":\"Cancels transfer of the controlling address of mutable split `split`\"},\"constructor\":{\"notice\":\"CONSTRUCTOR\"},\"createSplit(address[],uint32[],uint32,address)\":{\"notice\":\"Creates a new split with recipients `accounts` with ownerships `percentAllocations`, a keeper fee for splitting of `distributorFee` and the controlling address `controller`\"},\"distributeERC20(address,address,address[],uint32[],uint32,address)\":{\"notice\":\"Distributes the ERC20 `token` balance for split `split`\"},\"distributeETH(address,address[],uint32[],uint32,address)\":{\"notice\":\"Distributes the ETH balance for split `split`\"},\"getController(address)\":{\"notice\":\"Returns the current controller of split `split`\"},\"getERC20Balance(address,address)\":{\"notice\":\"Returns the ERC20 balance of token `token` for account `account`\"},\"getETHBalance(address)\":{\"notice\":\"Returns the current ETH balance of account `account`\"},\"getHash(address)\":{\"notice\":\"Returns the current hash of split `split`\"},\"getNewPotentialController(address)\":{\"notice\":\"Returns the current newPotentialController of split `split`\"},\"makeSplitImmutable(address)\":{\"notice\":\"Turns mutable split `split` immutable\"},\"predictImmutableSplitAddress(address[],uint32[],uint32)\":{\"notice\":\"Predicts the address for an immutable split created with recipients `accounts` with ownerships `percentAllocations` and a keeper fee for splitting of `distributorFee`\"},\"transferControl(address,address)\":{\"notice\":\"Begins transfer of the controlling address of mutable split `split` to `newController`\"},\"updateAndDistributeERC20(address,address,address[],uint32[],uint32,address)\":{\"notice\":\"Updates & distributes the ERC20 `token` balance for split `split`\"},\"updateAndDistributeETH(address,address[],uint32[],uint32,address)\":{\"notice\":\"Updates & distributes the ETH balance for split `split`\"},\"updateSplit(address,address[],uint32[],uint32)\":{\"notice\":\"Updates an existing split with recipients `accounts` with ownerships `percentAllocations` and a keeper fee for splitting of `distributorFee`\"},\"walletImplementation()\":{\"notice\":\"address of wallet implementation for split proxies\"},\"withdraw(address,uint256,address[])\":{\"notice\":\"Withdraw ETH &/ ERC20 balances for account `account`\"}},\"notice\":\"A composable and gas-efficient protocol for deploying splitter contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/splits/SplitMain.sol\":\"SplitMain\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@rari-capital/solmate/src/tokens/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.8.0;\\n\\n/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.\\n/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)\\n/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)\\n/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.\\nabstract contract ERC20 {\\n    /*//////////////////////////////////////////////////////////////\\n                                 EVENTS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            METADATA STORAGE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    string public name;\\n\\n    string public symbol;\\n\\n    uint8 public immutable decimals;\\n\\n    /*//////////////////////////////////////////////////////////////\\n                              ERC20 STORAGE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    uint256 public totalSupply;\\n\\n    mapping(address => uint256) public balanceOf;\\n\\n    mapping(address => mapping(address => uint256)) public allowance;\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            EIP-2612 STORAGE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    uint256 internal immutable INITIAL_CHAIN_ID;\\n\\n    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;\\n\\n    mapping(address => uint256) public nonces;\\n\\n    /*//////////////////////////////////////////////////////////////\\n                               CONSTRUCTOR\\n    //////////////////////////////////////////////////////////////*/\\n\\n    constructor(\\n        string memory _name,\\n        string memory _symbol,\\n        uint8 _decimals\\n    ) {\\n        name = _name;\\n        symbol = _symbol;\\n        decimals = _decimals;\\n\\n        INITIAL_CHAIN_ID = block.chainid;\\n        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                               ERC20 LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function approve(address spender, uint256 amount) public virtual returns (bool) {\\n        allowance[msg.sender][spender] = amount;\\n\\n        emit Approval(msg.sender, spender, amount);\\n\\n        return true;\\n    }\\n\\n    function transfer(address to, uint256 amount) public virtual returns (bool) {\\n        balanceOf[msg.sender] -= amount;\\n\\n        // Cannot overflow because the sum of all user\\n        // balances can't exceed the max uint256 value.\\n        unchecked {\\n            balanceOf[to] += amount;\\n        }\\n\\n        emit Transfer(msg.sender, to, amount);\\n\\n        return true;\\n    }\\n\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual returns (bool) {\\n        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.\\n\\n        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;\\n\\n        balanceOf[from] -= amount;\\n\\n        // Cannot overflow because the sum of all user\\n        // balances can't exceed the max uint256 value.\\n        unchecked {\\n            balanceOf[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        return true;\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                             EIP-2612 LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) public virtual {\\n        require(deadline >= block.timestamp, \\\"PERMIT_DEADLINE_EXPIRED\\\");\\n\\n        // Unchecked because the only math done is incrementing\\n        // the owner's nonce which cannot realistically overflow.\\n        unchecked {\\n            address recoveredAddress = ecrecover(\\n                keccak256(\\n                    abi.encodePacked(\\n                        \\\"\\\\x19\\\\x01\\\",\\n                        DOMAIN_SEPARATOR(),\\n                        keccak256(\\n                            abi.encode(\\n                                keccak256(\\n                                    \\\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\\\"\\n                                ),\\n                                owner,\\n                                spender,\\n                                value,\\n                                nonces[owner]++,\\n                                deadline\\n                            )\\n                        )\\n                    )\\n                ),\\n                v,\\n                r,\\n                s\\n            );\\n\\n            require(recoveredAddress != address(0) && recoveredAddress == owner, \\\"INVALID_SIGNER\\\");\\n\\n            allowance[recoveredAddress][spender] = value;\\n        }\\n\\n        emit Approval(owner, spender, value);\\n    }\\n\\n    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();\\n    }\\n\\n    function computeDomainSeparator() internal view virtual returns (bytes32) {\\n        return\\n            keccak256(\\n                abi.encode(\\n                    keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"),\\n                    keccak256(bytes(name)),\\n                    keccak256(\\\"1\\\"),\\n                    block.chainid,\\n                    address(this)\\n                )\\n            );\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                        INTERNAL MINT/BURN LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function _mint(address to, uint256 amount) internal virtual {\\n        totalSupply += amount;\\n\\n        // Cannot overflow because the sum of all user\\n        // balances can't exceed the max uint256 value.\\n        unchecked {\\n            balanceOf[to] += amount;\\n        }\\n\\n        emit Transfer(address(0), to, amount);\\n    }\\n\\n    function _burn(address from, uint256 amount) internal virtual {\\n        balanceOf[from] -= amount;\\n\\n        // Cannot underflow because a user's balance\\n        // will never be larger than the total supply.\\n        unchecked {\\n            totalSupply -= amount;\\n        }\\n\\n        emit Transfer(from, address(0), amount);\\n    }\\n}\\n\",\"keccak256\":\"0x0240f7703cff32a61ee3e9fbb339e09a944260432a9ef37debf3692b1a6c8049\",\"license\":\"AGPL-3.0-only\"},\"@rari-capital/solmate/src/utils/SafeTransferLib.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.8.0;\\n\\nimport {ERC20} from \\\"../tokens/ERC20.sol\\\";\\n\\n/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.\\n/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)\\n/// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.\\n/// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller.\\nlibrary SafeTransferLib {\\n    /*//////////////////////////////////////////////////////////////\\n                             ETH OPERATIONS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function safeTransferETH(address to, uint256 amount) internal {\\n        bool success;\\n\\n        assembly {\\n            // Transfer the ETH and store if it succeeded or not.\\n            success := call(gas(), to, amount, 0, 0, 0, 0)\\n        }\\n\\n        require(success, \\\"ETH_TRANSFER_FAILED\\\");\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            ERC20 OPERATIONS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function safeTransferFrom(\\n        ERC20 token,\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        bool success;\\n\\n        assembly {\\n            // Get a pointer to some free memory.\\n            let freeMemoryPointer := mload(0x40)\\n\\n            // Write the abi-encoded calldata into memory, beginning with the function selector.\\n            mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000)\\n            mstore(add(freeMemoryPointer, 4), from) // Append the \\\"from\\\" argument.\\n            mstore(add(freeMemoryPointer, 36), to) // Append the \\\"to\\\" argument.\\n            mstore(add(freeMemoryPointer, 68), amount) // Append the \\\"amount\\\" argument.\\n\\n            success := and(\\n                // Set success to whether the call reverted, if not we check it either\\n                // returned exactly 1 (can't just be non-zero data), or had no return data.\\n                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),\\n                // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3.\\n                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.\\n                // Counterintuitively, this call must be positioned second to the or() call in the\\n                // surrounding and() call or else returndatasize() will be zero during the computation.\\n                call(gas(), token, 0, freeMemoryPointer, 100, 0, 32)\\n            )\\n        }\\n\\n        require(success, \\\"TRANSFER_FROM_FAILED\\\");\\n    }\\n\\n    function safeTransfer(\\n        ERC20 token,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        bool success;\\n\\n        assembly {\\n            // Get a pointer to some free memory.\\n            let freeMemoryPointer := mload(0x40)\\n\\n            // Write the abi-encoded calldata into memory, beginning with the function selector.\\n            mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000)\\n            mstore(add(freeMemoryPointer, 4), to) // Append the \\\"to\\\" argument.\\n            mstore(add(freeMemoryPointer, 36), amount) // Append the \\\"amount\\\" argument.\\n\\n            success := and(\\n                // Set success to whether the call reverted, if not we check it either\\n                // returned exactly 1 (can't just be non-zero data), or had no return data.\\n                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),\\n                // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.\\n                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.\\n                // Counterintuitively, this call must be positioned second to the or() call in the\\n                // surrounding and() call or else returndatasize() will be zero during the computation.\\n                call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)\\n            )\\n        }\\n\\n        require(success, \\\"TRANSFER_FAILED\\\");\\n    }\\n\\n    function safeApprove(\\n        ERC20 token,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        bool success;\\n\\n        assembly {\\n            // Get a pointer to some free memory.\\n            let freeMemoryPointer := mload(0x40)\\n\\n            // Write the abi-encoded calldata into memory, beginning with the function selector.\\n            mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000)\\n            mstore(add(freeMemoryPointer, 4), to) // Append the \\\"to\\\" argument.\\n            mstore(add(freeMemoryPointer, 36), amount) // Append the \\\"amount\\\" argument.\\n\\n            success := and(\\n                // Set success to whether the call reverted, if not we check it either\\n                // returned exactly 1 (can't just be non-zero data), or had no return data.\\n                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),\\n                // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.\\n                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.\\n                // Counterintuitively, this call must be positioned second to the or() call in the\\n                // surrounding and() call or else returndatasize() will be zero during the computation.\\n                call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)\\n            )\\n        }\\n\\n        require(success, \\\"APPROVE_FAILED\\\");\\n    }\\n}\\n\",\"keccak256\":\"0xa28a1515702793c6b56b97272f75e05890fd82aa2e7ec47b41d4d56a81023f69\",\"license\":\"AGPL-3.0-only\"},\"contracts/splits/SplitMain.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.4;\\n\\nimport {ISplitMain} from './interfaces/ISplitMain.sol';\\nimport {SplitWallet} from './SplitWallet.sol';\\nimport {Clones} from './libraries/Clones.sol';\\nimport {ERC20} from '@rari-capital/solmate/src/tokens/ERC20.sol';\\nimport {SafeTransferLib} from '@rari-capital/solmate/src/utils/SafeTransferLib.sol';\\n\\n/**\\n\\n                                             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                                          \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                  \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                                         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588               \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                                        \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588               \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                                        \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588              \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                                        \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588               \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                                         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588               \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                                          \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                  \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                                             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n\\n                             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                          \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                  \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                        \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588           \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588               \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                       \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588              \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                       \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                       \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588              \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                        \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588           \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588               \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588              \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                   \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                          \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n\\n           \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n       \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                  \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n     \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588              \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                  \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n    \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588           \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588               \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n   \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588           \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588            \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588              \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n   \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588        \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588          \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588            \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n   \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588        \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588          \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588           \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n   \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588        \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588          \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588            \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n   \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588           \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588            \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588              \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n    \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588           \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588              \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n      \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588               \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                  \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n        \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                   \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n           \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n\\n                             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                          \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                  \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                        \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588           \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588               \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                       \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588              \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                       \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                       \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588              \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                        \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588           \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588               \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588              \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                   \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                          \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n\\n                                             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                                          \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                  \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                                         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588               \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                                        \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588               \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                                        \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588              \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                                        \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588               \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                                         \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588               \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                                          \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588                  \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n                                             \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\n\\n */\\n\\n/**\\n * ERRORS\\n */\\n\\n/// @notice Unauthorized sender `sender`\\n/// @param sender Transaction sender\\nerror Unauthorized(address sender);\\n/// @notice Invalid number of accounts `accountsLength`, must have at least 2\\n/// @param accountsLength Length of accounts array\\nerror InvalidSplit__TooFewAccounts(uint256 accountsLength);\\n/// @notice Array lengths of accounts & percentAllocations don't match (`accountsLength` != `allocationsLength`)\\n/// @param accountsLength Length of accounts array\\n/// @param allocationsLength Length of percentAllocations array\\nerror InvalidSplit__AccountsAndAllocationsMismatch(uint256 accountsLength, uint256 allocationsLength);\\n/// @notice Invalid percentAllocations sum `allocationsSum` must equal `PERCENTAGE_SCALE`\\n/// @param allocationsSum Sum of percentAllocations array\\nerror InvalidSplit__InvalidAllocationsSum(uint32 allocationsSum);\\n/// @notice Invalid accounts ordering at `index`\\n/// @param index Index of out-of-order account\\nerror InvalidSplit__AccountsOutOfOrder(uint256 index);\\n/// @notice Invalid percentAllocation of zero at `index`\\n/// @param index Index of zero percentAllocation\\nerror InvalidSplit__AllocationMustBePositive(uint256 index);\\n/// @notice Invalid distributorFee `distributorFee` cannot be greater than 10% (1e5)\\n/// @param distributorFee Invalid distributorFee amount\\nerror InvalidSplit__InvalidDistributorFee(uint32 distributorFee);\\n/// @notice Invalid hash `hash` from split data (accounts, percentAllocations, distributorFee)\\n/// @param hash Invalid hash\\nerror InvalidSplit__InvalidHash(bytes32 hash);\\n/// @notice Invalid new controlling address `newController` for mutable split\\n/// @param newController Invalid new controller\\nerror InvalidNewController(address newController);\\n\\n/**\\n * @title SplitMain\\n * @author 0xSplits <will@0xSplits.xyz>\\n * @notice A composable and gas-efficient protocol for deploying splitter contracts.\\n * @dev Split recipients, ownerships, and keeper fees are stored onchain as calldata & re-passed as args / validated\\n * via hashing when needed. Each split gets its own address & proxy for maximum composability with other contracts onchain.\\n * For these proxies, we extended EIP-1167 Minimal Proxy Contract to avoid `DELEGATECALL` inside `receive()` to accept\\n * hard gas-capped `sends` & `transfers`.\\n */\\ncontract SplitMain is ISplitMain {\\n    using SafeTransferLib for address;\\n    using SafeTransferLib for ERC20;\\n\\n    /**\\n     * STRUCTS\\n     */\\n\\n    /// @notice holds Split metadata\\n    struct Split {\\n        bytes32 hash;\\n        address controller;\\n        address newPotentialController;\\n    }\\n\\n    /**\\n     * STORAGE\\n     */\\n\\n    /**\\n     * STORAGE - CONSTANTS & IMMUTABLES\\n     */\\n\\n    /// @notice constant to scale uints into percentages (1e6 == 100%)\\n    uint256 public constant PERCENTAGE_SCALE = 1e6;\\n    /// @notice maximum distributor fee; 1e5 = 10% * PERCENTAGE_SCALE\\n    uint256 internal constant MAX_DISTRIBUTOR_FEE = 1e5;\\n    /// @notice address of wallet implementation for split proxies\\n    address public immutable override walletImplementation;\\n\\n    /**\\n     * STORAGE - VARIABLES - PRIVATE & INTERNAL\\n     */\\n\\n    /// @notice mapping to account ETH balances\\n    mapping(address => uint256) internal ethBalances;\\n    /// @notice mapping to account ERC20 balances\\n    mapping(ERC20 => mapping(address => uint256)) internal erc20Balances;\\n    /// @notice mapping to Split metadata\\n    mapping(address => Split) internal splits;\\n\\n    /**\\n     * MODIFIERS\\n     */\\n\\n    /** @notice Reverts if the sender doesn't own the split `split`\\n     *  @param split Address to check for control\\n     */\\n    modifier onlySplitController(address split) {\\n        if (msg.sender != splits[split].controller) revert Unauthorized(msg.sender);\\n        _;\\n    }\\n\\n    /** @notice Reverts if the sender isn't the new potential controller of split `split`\\n     *  @param split Address to check for new potential control\\n     */\\n    modifier onlySplitNewPotentialController(address split) {\\n        if (msg.sender != splits[split].newPotentialController) revert Unauthorized(msg.sender);\\n        _;\\n    }\\n\\n    /** @notice Reverts if the split with recipients represented by `accounts` and `percentAllocations` is malformed\\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\\n     *  @param percentAllocations Percent allocations associated with each address\\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\\n     */\\n    modifier validSplit(\\n        address[] memory accounts,\\n        uint32[] memory percentAllocations,\\n        uint32 distributorFee\\n    ) {\\n        if (accounts.length < 2) revert InvalidSplit__TooFewAccounts(accounts.length);\\n        if (accounts.length != percentAllocations.length)\\n            revert InvalidSplit__AccountsAndAllocationsMismatch(accounts.length, percentAllocations.length);\\n        // _getSum should overflow if any percentAllocation[i] < 0\\n        if (_getSum(percentAllocations) != PERCENTAGE_SCALE)\\n            revert InvalidSplit__InvalidAllocationsSum(_getSum(percentAllocations));\\n        unchecked {\\n            // overflow should be impossible in for-loop index\\n            // cache accounts length to save gas\\n            uint256 loopLength = accounts.length - 1;\\n            for (uint256 i = 0; i < loopLength; ++i) {\\n                // overflow should be impossible in array access math\\n                if (accounts[i] >= accounts[i + 1]) revert InvalidSplit__AccountsOutOfOrder(i);\\n                if (percentAllocations[i] == uint32(0)) revert InvalidSplit__AllocationMustBePositive(i);\\n            }\\n            // overflow should be impossible in array access math with validated equal array lengths\\n            if (percentAllocations[loopLength] == uint32(0)) revert InvalidSplit__AllocationMustBePositive(loopLength);\\n        }\\n        if (distributorFee > MAX_DISTRIBUTOR_FEE) revert InvalidSplit__InvalidDistributorFee(distributorFee);\\n        _;\\n    }\\n\\n    /** @notice Reverts if `newController` is the zero address\\n     *  @param newController Proposed new controlling address\\n     */\\n    modifier validNewController(address newController) {\\n        if (newController == address(0)) revert InvalidNewController(newController);\\n        _;\\n    }\\n\\n    /**\\n     * CONSTRUCTOR\\n     */\\n\\n    constructor() {\\n        walletImplementation = address(new SplitWallet());\\n    }\\n\\n    /**\\n     * FUNCTIONS\\n     */\\n\\n    /**\\n     * FUNCTIONS - PUBLIC & EXTERNAL\\n     */\\n\\n    /** @notice Receive ETH\\n     *  @dev Used by split proxies in `distributeETH` to transfer ETH to `SplitMain`\\n     *  Funds sent outside of `distributeETH` will be unrecoverable\\n     */\\n    receive() external payable {}\\n\\n    /** @notice Creates a new split with recipients `accounts` with ownerships `percentAllocations`, a keeper fee for splitting of `distributorFee` and the controlling address `controller`\\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\\n     *  @param percentAllocations Percent allocations associated with each address\\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\\n     *  @param controller Controlling address (0x0 if immutable)\\n     *  @return split Address of newly created split\\n     */\\n    function createSplit(\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address controller\\n    ) external override validSplit(accounts, percentAllocations, distributorFee) returns (address split) {\\n        bytes32 splitHash = _hashSplit(accounts, percentAllocations, distributorFee);\\n        if (controller == address(0)) {\\n            // create immutable split\\n            split = Clones.cloneDeterministic(walletImplementation, splitHash);\\n        } else {\\n            // create mutable split\\n            split = Clones.clone(walletImplementation);\\n            splits[split].controller = controller;\\n        }\\n        // store split's hash in storage for future verification\\n        splits[split].hash = splitHash;\\n        emit CreateSplit(split);\\n    }\\n\\n    /** @notice Predicts the address for an immutable split created with recipients `accounts` with ownerships `percentAllocations` and a keeper fee for splitting of `distributorFee`\\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\\n     *  @param percentAllocations Percent allocations associated with each address\\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\\n     *  @return split Predicted address of such an immutable split\\n     */\\n    function predictImmutableSplitAddress(\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee\\n    ) external view override validSplit(accounts, percentAllocations, distributorFee) returns (address split) {\\n        bytes32 splitHash = _hashSplit(accounts, percentAllocations, distributorFee);\\n        split = Clones.predictDeterministicAddress(walletImplementation, splitHash);\\n    }\\n\\n    /** @notice Updates an existing split with recipients `accounts` with ownerships `percentAllocations` and a keeper fee for splitting of `distributorFee`\\n     *  @param split Address of mutable split to update\\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\\n     *  @param percentAllocations Percent allocations associated with each address\\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\\n     */\\n    function updateSplit(\\n        address split,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee\\n    ) external override onlySplitController(split) validSplit(accounts, percentAllocations, distributorFee) {\\n        _updateSplit(split, accounts, percentAllocations, distributorFee);\\n    }\\n\\n    /** @notice Begins transfer of the controlling address of mutable split `split` to `newController`\\n     *  @dev Two-step control transfer inspired by [dharma](https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/helpers/TwoStepOwnable.sol)\\n     *  @param split Address of mutable split to transfer control for\\n     *  @param newController Address to begin transferring control to\\n     */\\n    function transferControl(address split, address newController)\\n        external\\n        override\\n        onlySplitController(split)\\n        validNewController(newController)\\n    {\\n        splits[split].newPotentialController = newController;\\n        emit InitiateControlTransfer(split, newController);\\n    }\\n\\n    /** @notice Cancels transfer of the controlling address of mutable split `split`\\n     *  @param split Address of mutable split to cancel control transfer for\\n     */\\n    function cancelControlTransfer(address split) external override onlySplitController(split) {\\n        delete splits[split].newPotentialController;\\n        emit CancelControlTransfer(split);\\n    }\\n\\n    /** @notice Accepts transfer of the controlling address of mutable split `split`\\n     *  @param split Address of mutable split to accept control transfer for\\n     */\\n    function acceptControl(address split) external override onlySplitNewPotentialController(split) {\\n        delete splits[split].newPotentialController;\\n        emit ControlTransfer(split, splits[split].controller, msg.sender);\\n        splits[split].controller = msg.sender;\\n    }\\n\\n    /** @notice Turns mutable split `split` immutable\\n     *  @param split Address of mutable split to turn immutable\\n     */\\n    function makeSplitImmutable(address split) external override onlySplitController(split) {\\n        delete splits[split].newPotentialController;\\n        emit ControlTransfer(split, splits[split].controller, address(0));\\n        splits[split].controller = address(0);\\n    }\\n\\n    /** @notice Distributes the ETH balance for split `split`\\n     *  @dev `accounts`, `percentAllocations`, and `distributorFee` are verified by hashing\\n     *  & comparing to the hash in storage associated with split `split`\\n     *  @param split Address of split to distribute balance for\\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\\n     *  @param percentAllocations Percent allocations associated with each address\\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\\n     *  @param distributorAddress Address to pay `distributorFee` to\\n     */\\n    function distributeETH(\\n        address split,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) external override validSplit(accounts, percentAllocations, distributorFee) {\\n        // use internal fn instead of modifier to avoid stack depth compiler errors\\n        _validSplitHash(split, accounts, percentAllocations, distributorFee);\\n        _distributeETH(split, accounts, percentAllocations, distributorFee, distributorAddress);\\n    }\\n\\n    /** @notice Updates & distributes the ETH balance for split `split`\\n     *  @dev only callable by SplitController\\n     *  @param split Address of split to distribute balance for\\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\\n     *  @param percentAllocations Percent allocations associated with each address\\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\\n     *  @param distributorAddress Address to pay `distributorFee` to\\n     */\\n    function updateAndDistributeETH(\\n        address split,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) external override onlySplitController(split) validSplit(accounts, percentAllocations, distributorFee) {\\n        _updateSplit(split, accounts, percentAllocations, distributorFee);\\n        // know splitHash is valid immediately after updating; only accessible via controller\\n        _distributeETH(split, accounts, percentAllocations, distributorFee, distributorAddress);\\n    }\\n\\n    /** @notice Distributes the ERC20 `token` balance for split `split`\\n     *  @dev `accounts`, `percentAllocations`, and `distributorFee` are verified by hashing\\n     *  & comparing to the hash in storage associated with split `split`\\n     *  @dev pernicious ERC20s may cause overflow in this function inside\\n     *  _scaleAmountByPercentage, but results do not affect ETH & other ERC20 balances\\n     *  @param split Address of split to distribute balance for\\n     *  @param token Address of ERC20 to distribute balance for\\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\\n     *  @param percentAllocations Percent allocations associated with each address\\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\\n     *  @param distributorAddress Address to pay `distributorFee` to\\n     */\\n    function distributeERC20(\\n        address split,\\n        ERC20 token,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) external override validSplit(accounts, percentAllocations, distributorFee) {\\n        // use internal fn instead of modifier to avoid stack depth compiler errors\\n        _validSplitHash(split, accounts, percentAllocations, distributorFee);\\n        _distributeERC20(split, token, accounts, percentAllocations, distributorFee, distributorAddress);\\n    }\\n\\n    /** @notice Updates & distributes the ERC20 `token` balance for split `split`\\n     *  @dev only callable by SplitController\\n     *  @dev pernicious ERC20s may cause overflow in this function inside\\n     *  _scaleAmountByPercentage, but results do not affect ETH & other ERC20 balances\\n     *  @param split Address of split to distribute balance for\\n     *  @param token Address of ERC20 to distribute balance for\\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\\n     *  @param percentAllocations Percent allocations associated with each address\\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\\n     *  @param distributorAddress Address to pay `distributorFee` to\\n     */\\n    function updateAndDistributeERC20(\\n        address split,\\n        ERC20 token,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) external override onlySplitController(split) validSplit(accounts, percentAllocations, distributorFee) {\\n        _updateSplit(split, accounts, percentAllocations, distributorFee);\\n        // know splitHash is valid immediately after updating; only accessible via controller\\n        _distributeERC20(split, token, accounts, percentAllocations, distributorFee, distributorAddress);\\n    }\\n\\n    /** @notice Withdraw ETH &/ ERC20 balances for account `account`\\n     *  @param account Address to withdraw on behalf of\\n     *  @param withdrawETH Withdraw all ETH if nonzero\\n     *  @param tokens Addresses of ERC20s to withdraw\\n     */\\n    function withdraw(\\n        address account,\\n        uint256 withdrawETH,\\n        ERC20[] calldata tokens\\n    ) external override {\\n        uint256[] memory tokenAmounts = new uint256[](tokens.length);\\n        uint256 ethAmount;\\n        if (withdrawETH != 0) {\\n            ethAmount = _withdraw(account);\\n        }\\n        unchecked {\\n            // overflow should be impossible in for-loop index\\n            for (uint256 i = 0; i < tokens.length; ++i) {\\n                // overflow should be impossible in array length math\\n                tokenAmounts[i] = _withdrawERC20(account, tokens[i]);\\n            }\\n            emit Withdrawal(account, ethAmount, tokens, tokenAmounts);\\n        }\\n    }\\n\\n    /**\\n     * FUNCTIONS - VIEWS\\n     */\\n\\n    /** @notice Returns the current hash of split `split`\\n     *  @param split Split to return hash for\\n     *  @return Split's hash\\n     */\\n    function getHash(address split) external view returns (bytes32) {\\n        return splits[split].hash;\\n    }\\n\\n    /** @notice Returns the current controller of split `split`\\n     *  @param split Split to return controller for\\n     *  @return Split's controller\\n     */\\n    function getController(address split) external view returns (address) {\\n        return splits[split].controller;\\n    }\\n\\n    /** @notice Returns the current newPotentialController of split `split`\\n     *  @param split Split to return newPotentialController for\\n     *  @return Split's newPotentialController\\n     */\\n    function getNewPotentialController(address split) external view returns (address) {\\n        return splits[split].newPotentialController;\\n    }\\n\\n    /** @notice Returns the current ETH balance of account `account`\\n     *  @param account Account to return ETH balance for\\n     *  @return Account's balance of ETH\\n     */\\n    function getETHBalance(address account) external view returns (uint256) {\\n        return ethBalances[account] + (splits[account].hash != 0 ? account.balance : 0);\\n    }\\n\\n    /** @notice Returns the ERC20 balance of token `token` for account `account`\\n     *  @param account Account to return ERC20 `token` balance for\\n     *  @param token Token to return balance for\\n     *  @return Account's balance of `token`\\n     */\\n    function getERC20Balance(address account, ERC20 token) external view returns (uint256) {\\n        return erc20Balances[token][account] + (splits[account].hash != 0 ? token.balanceOf(account) : 0);\\n    }\\n\\n    /**\\n     * FUNCTIONS - PRIVATE & INTERNAL\\n     */\\n\\n    /** @notice Sums array of uint32s\\n     *  @param numbers Array of uint32s to sum\\n     *  @return sum Sum of `numbers`.\\n     */\\n    function _getSum(uint32[] memory numbers) internal pure returns (uint32 sum) {\\n        // overflow should be impossible in for-loop index\\n        uint256 numbersLength = numbers.length;\\n        for (uint256 i = 0; i < numbersLength; ) {\\n            sum += numbers[i];\\n            unchecked {\\n                // overflow should be impossible in for-loop index\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /** @notice Hashes a split\\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\\n     *  @param percentAllocations Percent allocations associated with each address\\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\\n     *  @return computedHash Hash of the split.\\n     */\\n    function _hashSplit(\\n        address[] memory accounts,\\n        uint32[] memory percentAllocations,\\n        uint32 distributorFee\\n    ) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(accounts, percentAllocations, distributorFee));\\n    }\\n\\n    /** @notice Updates an existing split with recipients `accounts` with ownerships `percentAllocations` and a keeper fee for splitting of `distributorFee`\\n     *  @param split Address of mutable split to update\\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\\n     *  @param percentAllocations Percent allocations associated with each address\\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\\n     */\\n    function _updateSplit(\\n        address split,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee\\n    ) internal {\\n        bytes32 splitHash = _hashSplit(accounts, percentAllocations, distributorFee);\\n        // store new hash in storage for future verification\\n        splits[split].hash = splitHash;\\n        emit UpdateSplit(split);\\n    }\\n\\n    /** @notice Checks hash from `accounts`, `percentAllocations`, and `distributorFee` against the hash stored for `split`\\n     *  @param split Address of hash to check\\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\\n     *  @param percentAllocations Percent allocations associated with each address\\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\\n     */\\n    function _validSplitHash(\\n        address split,\\n        address[] memory accounts,\\n        uint32[] memory percentAllocations,\\n        uint32 distributorFee\\n    ) internal view {\\n        bytes32 hash = _hashSplit(accounts, percentAllocations, distributorFee);\\n        if (splits[split].hash != hash) revert InvalidSplit__InvalidHash(hash);\\n    }\\n\\n    /** @notice Distributes the ETH balance for split `split`\\n     *  @dev `accounts`, `percentAllocations`, and `distributorFee` must be verified before calling\\n     *  @param split Address of split to distribute balance for\\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\\n     *  @param percentAllocations Percent allocations associated with each address\\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\\n     *  @param distributorAddress Address to pay `distributorFee` to\\n     */\\n    function _distributeETH(\\n        address split,\\n        address[] memory accounts,\\n        uint32[] memory percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) internal {\\n        uint256 mainBalance = ethBalances[split];\\n        uint256 proxyBalance = split.balance;\\n        // if mainBalance is positive, leave 1 in SplitMain for gas efficiency\\n        uint256 amountToSplit;\\n        unchecked {\\n            // underflow should be impossible\\n            if (mainBalance > 0) mainBalance -= 1;\\n            // overflow should be impossible\\n            amountToSplit = mainBalance + proxyBalance;\\n        }\\n        if (mainBalance > 0) ethBalances[split] = 1;\\n        // emit event with gross amountToSplit (before deducting distributorFee)\\n        emit DistributeETH(split, amountToSplit, distributorAddress);\\n        if (distributorFee != 0) {\\n            // given `amountToSplit`, calculate keeper fee\\n            uint256 distributorFeeAmount = _scaleAmountByPercentage(amountToSplit, distributorFee);\\n            unchecked {\\n                // credit keeper with fee\\n                // overflow should be impossible with validated distributorFee\\n                ethBalances[distributorAddress != address(0) ? distributorAddress : msg.sender] += distributorFeeAmount;\\n                // given keeper fee, calculate how much to distribute to split recipients\\n                // underflow should be impossible with validated distributorFee\\n                amountToSplit -= distributorFeeAmount;\\n            }\\n        }\\n        unchecked {\\n            // distribute remaining balance\\n            // overflow should be impossible in for-loop index\\n            // cache accounts length to save gas\\n            uint256 accountsLength = accounts.length;\\n            for (uint256 i = 0; i < accountsLength; ++i) {\\n                // overflow should be impossible with validated allocations\\n                ethBalances[accounts[i]] += _scaleAmountByPercentage(amountToSplit, percentAllocations[i]);\\n            }\\n        }\\n        // flush proxy ETH balance to SplitMain\\n        // split proxy should be guaranteed to exist at this address after validating splitHash\\n        // (attacker can't deploy own contract to address with high balance & empty sendETHToMain\\n        // to drain ETH from SplitMain)\\n        // could technically check if (change in proxy balance == change in SplitMain balance)\\n        // before/after external call, but seems like extra gas for no practical benefit\\n        if (proxyBalance > 0) SplitWallet(split).sendETHToMain(proxyBalance);\\n    }\\n\\n    /** @notice Distributes the ERC20 `token` balance for split `split`\\n     *  @dev `accounts`, `percentAllocations`, and `distributorFee` must be verified before calling\\n     *  @dev pernicious ERC20s may cause overflow in this function inside\\n     *  _scaleAmountByPercentage, but results do not affect ETH & other ERC20 balances\\n     *  @param split Address of split to distribute balance for\\n     *  @param token Address of ERC20 to distribute balance for\\n     *  @param accounts Ordered, unique list of addresses with ownership in the split\\n     *  @param percentAllocations Percent allocations associated with each address\\n     *  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\\n     *  @param distributorAddress Address to pay `distributorFee` to\\n     */\\n    function _distributeERC20(\\n        address split,\\n        ERC20 token,\\n        address[] memory accounts,\\n        uint32[] memory percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) internal {\\n        uint256 amountToSplit;\\n        uint256 mainBalance = erc20Balances[token][split];\\n        uint256 proxyBalance = token.balanceOf(split);\\n        unchecked {\\n            // if mainBalance &/ proxyBalance are positive, leave 1 for gas efficiency\\n            // underflow should be impossible\\n            if (proxyBalance > 0) proxyBalance -= 1;\\n            // underflow should be impossible\\n            if (mainBalance > 0) {\\n                mainBalance -= 1;\\n            }\\n            // overflow should be impossible\\n            amountToSplit = mainBalance + proxyBalance;\\n        }\\n        if (mainBalance > 0) erc20Balances[token][split] = 1;\\n        // emit event with gross amountToSplit (before deducting distributorFee)\\n        emit DistributeERC20(split, token, amountToSplit, distributorAddress);\\n        if (distributorFee != 0) {\\n            // given `amountToSplit`, calculate keeper fee\\n            uint256 distributorFeeAmount = _scaleAmountByPercentage(amountToSplit, distributorFee);\\n            // overflow should be impossible with validated distributorFee\\n            unchecked {\\n                // credit keeper with fee\\n                erc20Balances[token][\\n                    distributorAddress != address(0) ? distributorAddress : msg.sender\\n                ] += distributorFeeAmount;\\n                // given keeper fee, calculate how much to distribute to split recipients\\n                amountToSplit -= distributorFeeAmount;\\n            }\\n        }\\n        // distribute remaining balance\\n        // overflows should be impossible in for-loop with validated allocations\\n        unchecked {\\n            // cache accounts length to save gas\\n            uint256 accountsLength = accounts.length;\\n            for (uint256 i = 0; i < accountsLength; ++i) {\\n                erc20Balances[token][accounts[i]] += _scaleAmountByPercentage(amountToSplit, percentAllocations[i]);\\n            }\\n        }\\n        // split proxy should be guaranteed to exist at this address after validating splitHash\\n        // (attacker can't deploy own contract to address with high ERC20 balance & empty\\n        // sendERC20ToMain to drain ERC20 from SplitMain)\\n        // doesn't support rebasing or fee-on-transfer tokens\\n        // flush extra proxy ERC20 balance to SplitMain\\n        if (proxyBalance > 0) SplitWallet(split).sendERC20ToMain(token, proxyBalance);\\n    }\\n\\n    /** @notice Multiplies an amount by a scaled percentage\\n     *  @param amount Amount to get `scaledPercentage` of\\n     *  @param scaledPercent Percent scaled by PERCENTAGE_SCALE\\n     *  @return scaledAmount Percent of `amount`.\\n     */\\n    function _scaleAmountByPercentage(uint256 amount, uint256 scaledPercent)\\n        internal\\n        pure\\n        returns (uint256 scaledAmount)\\n    {\\n        // use assembly to bypass checking for overflow & division by 0\\n        // scaledPercent has been validated to be < PERCENTAGE_SCALE)\\n        // & PERCENTAGE_SCALE will never be 0\\n        // pernicious ERC20s may cause overflow, but results do not affect ETH & other ERC20 balances\\n        assembly {\\n            /* eg (100 * 2*1e4) / (1e6) */\\n            scaledAmount := div(mul(amount, scaledPercent), PERCENTAGE_SCALE)\\n        }\\n    }\\n\\n    /** @notice Withdraw ETH for account `account`\\n     *  @param account Account to withdrawn ETH for\\n     *  @return withdrawn Amount of ETH withdrawn\\n     */\\n    function _withdraw(address account) internal returns (uint256 withdrawn) {\\n        // leave balance of 1 for gas efficiency\\n        // underflow if ethBalance is 0\\n        withdrawn = ethBalances[account] - 1;\\n        ethBalances[account] = 1;\\n        account.safeTransferETH(withdrawn);\\n    }\\n\\n    /** @notice Withdraw ERC20 `token` for account `account`\\n     *  @param account Account to withdrawn ERC20 `token` for\\n     *  @return withdrawn Amount of ERC20 `token` withdrawn\\n     */\\n    function _withdrawERC20(address account, ERC20 token) internal returns (uint256 withdrawn) {\\n        // leave balance of 1 for gas efficiency\\n        // underflow if erc20Balance is 0\\n        withdrawn = erc20Balances[token][account] - 1;\\n        erc20Balances[token][account] = 1;\\n        token.safeTransfer(account, withdrawn);\\n    }\\n}\\n\",\"keccak256\":\"0xec0992b244ea44e64f78b4c73ba3cff331461f1a75832a4ac51338830a6d9274\",\"license\":\"GPL-3.0-or-later\"},\"contracts/splits/SplitWallet.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.4;\\n\\nimport {ISplitMain} from './interfaces/ISplitMain.sol';\\nimport {ERC20} from '@rari-capital/solmate/src/tokens/ERC20.sol';\\nimport {SafeTransferLib} from '@rari-capital/solmate/src/utils/SafeTransferLib.sol';\\n\\n/**\\n * ERRORS\\n */\\n\\n/// @notice Unauthorized sender\\nerror Unauthorized();\\n\\n/**\\n * @title SplitWallet\\n * @author 0xSplits <will@0xSplits.xyz>\\n * @notice The implementation logic for `SplitProxy`.\\n * @dev `SplitProxy` handles `receive()` itself to avoid the gas cost with `DELEGATECALL`.\\n */\\ncontract SplitWallet {\\n    using SafeTransferLib for address;\\n    using SafeTransferLib for ERC20;\\n\\n    /**\\n     * EVENTS\\n     */\\n\\n    /** @notice emitted after each successful ETH transfer to proxy\\n     *  @param split Address of the split that received ETH\\n     *  @param amount Amount of ETH received\\n     */\\n    event ReceiveETH(address indexed split, uint256 amount);\\n\\n    /**\\n     * STORAGE\\n     */\\n\\n    /**\\n     * STORAGE - CONSTANTS & IMMUTABLES\\n     */\\n\\n    /// @notice address of SplitMain for split distributions & EOA/SC withdrawals\\n    ISplitMain public immutable splitMain;\\n\\n    /**\\n     * MODIFIERS\\n     */\\n\\n    /// @notice Reverts if the sender isn't SplitMain\\n    modifier onlySplitMain() {\\n        if (msg.sender != address(splitMain)) revert Unauthorized();\\n        _;\\n    }\\n\\n    /**\\n     * CONSTRUCTOR\\n     */\\n\\n    constructor() {\\n        splitMain = ISplitMain(msg.sender);\\n    }\\n\\n    /**\\n     * FUNCTIONS - PUBLIC & EXTERNAL\\n     */\\n\\n    /** @notice Sends amount `amount` of ETH in proxy to SplitMain\\n     *  @dev payable reduces gas cost; no vulnerability to accidentally lock\\n     *  ETH introduced since fn call is restricted to SplitMain\\n     *  @param amount Amount to send\\n     */\\n    function sendETHToMain(uint256 amount) external payable onlySplitMain {\\n        address(splitMain).safeTransferETH(amount);\\n    }\\n\\n    /** @notice Sends amount `amount` of ERC20 `token` in proxy to SplitMain\\n     *  @dev payable reduces gas cost; no vulnerability to accidentally lock\\n     *  ETH introduced since fn call is restricted to SplitMain\\n     *  @param token Token to send\\n     *  @param amount Amount to send\\n     */\\n    function sendERC20ToMain(ERC20 token, uint256 amount) external payable onlySplitMain {\\n        token.safeTransfer(address(splitMain), amount);\\n    }\\n}\\n\",\"keccak256\":\"0x0dcc554a38e302879fece74d5ae2fdcef5a80190575cd5d22c29a94a7d0696c7\",\"license\":\"GPL-3.0-or-later\"},\"contracts/splits/interfaces/ISplitMain.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.4;\\n\\nimport {ERC20} from '@rari-capital/solmate/src/tokens/ERC20.sol';\\n\\n/**\\n * @title ISplitMain\\n * @author 0xSplits <will@0xSplits.xyz>\\n */\\ninterface ISplitMain {\\n    /**\\n     * FUNCTIONS\\n     */\\n\\n    function walletImplementation() external returns (address);\\n\\n    function createSplit(\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address controller\\n    ) external returns (address);\\n\\n    function predictImmutableSplitAddress(\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee\\n    ) external view returns (address);\\n\\n    function updateSplit(\\n        address split,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee\\n    ) external;\\n\\n    function transferControl(address split, address newController) external;\\n\\n    function cancelControlTransfer(address split) external;\\n\\n    function acceptControl(address split) external;\\n\\n    function makeSplitImmutable(address split) external;\\n\\n    function distributeETH(\\n        address split,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) external;\\n\\n    function updateAndDistributeETH(\\n        address split,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) external;\\n\\n    function distributeERC20(\\n        address split,\\n        ERC20 token,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) external;\\n\\n    function updateAndDistributeERC20(\\n        address split,\\n        ERC20 token,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) external;\\n\\n    function withdraw(\\n        address account,\\n        uint256 withdrawETH,\\n        ERC20[] calldata tokens\\n    ) external;\\n\\n    /**\\n     * EVENTS\\n     */\\n\\n    /** @notice emitted after each successful split creation\\n     *  @param split Address of the created split\\n     */\\n    event CreateSplit(address indexed split);\\n\\n    /** @notice emitted after each successful split update\\n     *  @param split Address of the updated split\\n     */\\n    event UpdateSplit(address indexed split);\\n\\n    /** @notice emitted after each initiated split control transfer\\n     *  @param split Address of the split control transfer was initiated for\\n     *  @param newPotentialController Address of the split's new potential controller\\n     */\\n    event InitiateControlTransfer(address indexed split, address indexed newPotentialController);\\n\\n    /** @notice emitted after each canceled split control transfer\\n     *  @param split Address of the split control transfer was canceled for\\n     */\\n    event CancelControlTransfer(address indexed split);\\n\\n    /** @notice emitted after each successful split control transfer\\n     *  @param split Address of the split control was transferred for\\n     *  @param previousController Address of the split's previous controller\\n     *  @param newController Address of the split's new controller\\n     */\\n    event ControlTransfer(address indexed split, address indexed previousController, address indexed newController);\\n\\n    /** @notice emitted after each successful ETH balance split\\n     *  @param split Address of the split that distributed its balance\\n     *  @param amount Amount of ETH distributed\\n     *  @param distributorAddress Address to credit distributor fee to\\n     */\\n    event DistributeETH(address indexed split, uint256 amount, address indexed distributorAddress);\\n\\n    /** @notice emitted after each successful ERC20 balance split\\n     *  @param split Address of the split that distributed its balance\\n     *  @param token Address of ERC20 distributed\\n     *  @param amount Amount of ERC20 distributed\\n     *  @param distributorAddress Address to credit distributor fee to\\n     */\\n    event DistributeERC20(\\n        address indexed split,\\n        ERC20 indexed token,\\n        uint256 amount,\\n        address indexed distributorAddress\\n    );\\n\\n    /** @notice emitted after each successful withdrawal\\n     *  @param account Address that funds were withdrawn to\\n     *  @param ethAmount Amount of ETH withdrawn\\n     *  @param tokens Addresses of ERC20s withdrawn\\n     *  @param tokenAmounts Amounts of corresponding ERC20s withdrawn\\n     */\\n    event Withdrawal(address indexed account, uint256 ethAmount, ERC20[] tokens, uint256[] tokenAmounts);\\n}\\n\",\"keccak256\":\"0xcf2e72575544c2d95a855846782b7eb66ca0315472a1e11f9bb9da664dcecf90\",\"license\":\"GPL-3.0-or-later\"},\"contracts/splits/libraries/Clones.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.4;\\n\\n/// @notice create opcode failed\\nerror CreateError();\\n/// @notice create2 opcode failed\\nerror Create2Error();\\n\\nlibrary Clones {\\n    /**\\n     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`\\n     * except when someone calls `receive()` and then it emits an event matching\\n     * `SplitWallet.ReceiveETH(indexed address, amount)`\\n     * Inspired by OZ & 0age's minimal clone implementations based on eip 1167 found at\\n     * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.0/contracts/proxy/Clones.sol\\n     * and https://medium.com/coinmonks/the-more-minimal-proxy-5756ae08ee48\\n     *\\n     * This function uses the create2 opcode and a `salt` to deterministically deploy\\n     * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n     * the clones cannot be deployed twice at the same address.\\n     *\\n     * init: 0x3d605d80600a3d3981f3\\n     * 3d   returndatasize  0\\n     * 605d push1 0x5d      0x5d 0\\n     * 80   dup1            0x5d 0x5d 0\\n     * 600a push1 0x0a      0x0a 0x5d 0x5d 0\\n     * 3d   returndatasize  0 0x0a 0x5d 0x5d 0\\n     * 39   codecopy        0x5d 0                      destOffset offset length     memory[destOffset:destOffset+length] = address(this).code[offset:offset+length]       copy executing contracts bytecode\\n     * 81   dup2            0 0x5d 0\\n     * f3   return          0                           offset length                return memory[offset:offset+length]                                                   returns from this contract call\\n     *\\n     * contract: 0x36603057343d52307f830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b160203da23d3df35b3d3d3d3d363d3d37363d73bebebebebebebebebebebebebebebebebebebebe5af43d3d93803e605b57fd5bf3\\n     *     0x000     36       calldatasize      cds\\n     *     0x001     6030     push1 0x30        0x30 cds\\n     * ,=< 0x003     57       jumpi\\n     * |   0x004     34       callvalue         cv\\n     * |   0x005     3d       returndatasize    0 cv\\n     * |   0x006     52       mstore\\n     * |   0x007     30       address           addr\\n     * |   0x008     7f830d.. push32 0x830d..   id addr\\n     * |   0x029     6020     push1 0x20        0x20 id addr\\n     * |   0x02b     3d       returndatasize    0 0x20 id addr\\n     * |   0x02c     a2       log2\\n     * |   0x02d     3d       returndatasize    0\\n     * |   0x02e     3d       returndatasize    0 0\\n     * |   0x02f     f3       return\\n     * `-> 0x030     5b       jumpdest\\n     *     0x031     3d       returndatasize    0\\n     *     0x032     3d       returndatasize    0 0\\n     *     0x033     3d       returndatasize    0 0 0\\n     *     0x034     3d       returndatasize    0 0 0 0\\n     *     0x035     36       calldatasize      cds 0 0 0 0\\n     *     0x036     3d       returndatasize    0 cds 0 0 0 0\\n     *     0x037     3d       returndatasize    0 0 cds 0 0 0 0\\n     *     0x038     37       calldatacopy      0 0 0 0\\n     *     0x039     36       calldatasize      cds 0 0 0 0\\n     *     0x03a     3d       returndatasize    0 cds 0 0 0 0\\n     *     0x03b     73bebe.. push20 0xbebe..   0xbebe 0 cds 0 0 0 0\\n     *     0x050     5a       gas               gas 0xbebe 0 cds 0 0 0 0\\n     *     0x051     f4       delegatecall      suc 0 0\\n     *     0x052     3d       returndatasize    rds suc 0 0\\n     *     0x053     3d       returndatasize    rds rds suc 0 0\\n     *     0x054     93       swap4             0 rds suc 0 rds\\n     *     0x055     80       dup1              0 0 rds suc 0 rds\\n     *     0x056     3e       returndatacopy    suc 0 rds\\n     *     0x057     605b     push1 0x5b        0x5b suc 0 rds\\n     * ,=< 0x059     57       jumpi             0 rds\\n     * |   0x05a     fd       revert\\n     * `-> 0x05b     5b       jumpdest          0 rds\\n     *     0x05c     f3       return\\n     *\\n     */\\n    function clone(address implementation) internal returns (address instance) {\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, 0x3d605d80600a3d3981f336603057343d52307f00000000000000000000000000)\\n            mstore(add(ptr, 0x13), 0x830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b1)\\n            mstore(add(ptr, 0x33), 0x60203da23d3df35b3d3d3d3d363d3d37363d7300000000000000000000000000)\\n            mstore(add(ptr, 0x46), shl(0x60, implementation))\\n            mstore(add(ptr, 0x5a), 0x5af43d3d93803e605b57fd5bf300000000000000000000000000000000000000)\\n            instance := create(0, ptr, 0x67)\\n        }\\n        if (instance == address(0)) revert CreateError();\\n    }\\n\\n    function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, 0x3d605d80600a3d3981f336603057343d52307f00000000000000000000000000)\\n            mstore(add(ptr, 0x13), 0x830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b1)\\n            mstore(add(ptr, 0x33), 0x60203da23d3df35b3d3d3d3d363d3d37363d7300000000000000000000000000)\\n            mstore(add(ptr, 0x46), shl(0x60, implementation))\\n            mstore(add(ptr, 0x5a), 0x5af43d3d93803e605b57fd5bf300000000000000000000000000000000000000)\\n            instance := create2(0, ptr, 0x67, salt)\\n        }\\n        if (instance == address(0)) revert Create2Error();\\n    }\\n\\n    /**\\n     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n     */\\n    function predictDeterministicAddress(\\n        address implementation,\\n        bytes32 salt,\\n        address deployer\\n    ) internal pure returns (address predicted) {\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, 0x3d605d80600a3d3981f336603057343d52307f00000000000000000000000000)\\n            mstore(add(ptr, 0x13), 0x830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b1)\\n            mstore(add(ptr, 0x33), 0x60203da23d3df35b3d3d3d3d363d3d37363d7300000000000000000000000000)\\n            mstore(add(ptr, 0x46), shl(0x60, implementation))\\n            mstore(add(ptr, 0x5a), 0x5af43d3d93803e605b57fd5bf3ff000000000000000000000000000000000000)\\n            mstore(add(ptr, 0x68), shl(0x60, deployer))\\n            mstore(add(ptr, 0x7c), salt)\\n            mstore(add(ptr, 0x9c), keccak256(ptr, 0x67))\\n            predicted := keccak256(add(ptr, 0x67), 0x55)\\n        }\\n    }\\n\\n    /**\\n     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n     */\\n    function predictDeterministicAddress(address implementation, bytes32 salt)\\n        internal\\n        view\\n        returns (address predicted)\\n    {\\n        return predictDeterministicAddress(implementation, salt, address(this));\\n    }\\n}\\n\",\"keccak256\":\"0x4f3585e1081f4cc05862a775bcfc48aae12980d3bb47ced376f09c1d21e0ebe2\",\"license\":\"GPL-3.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 565,
                "contract": "contracts/splits/SplitMain.sol:SplitMain",
                "label": "ethBalances",
                "offset": 0,
                "slot": "0",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 573,
                "contract": "contracts/splits/SplitMain.sol:SplitMain",
                "label": "erc20Balances",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_contract(ERC20)387,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 579,
                "contract": "contracts/splits/SplitMain.sol:SplitMain",
                "label": "splits",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_struct(Split)548_storage)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_contract(ERC20)387": {
                "encoding": "inplace",
                "label": "contract ERC20",
                "numberOfBytes": "20"
              },
              "t_mapping(t_address,t_struct(Split)548_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct SplitMain.Split)",
                "numberOfBytes": "32",
                "value": "t_struct(Split)548_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_contract(ERC20)387,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_contract(ERC20)387",
                "label": "mapping(contract ERC20 => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_struct(Split)548_storage": {
                "encoding": "inplace",
                "label": "struct SplitMain.Split",
                "members": [
                  {
                    "astId": 543,
                    "contract": "contracts/splits/SplitMain.sol:SplitMain",
                    "label": "hash",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_bytes32"
                  },
                  {
                    "astId": 545,
                    "contract": "contracts/splits/SplitMain.sol:SplitMain",
                    "label": "controller",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_address"
                  },
                  {
                    "astId": 547,
                    "contract": "contracts/splits/SplitMain.sol:SplitMain",
                    "label": "newPotentialController",
                    "offset": 0,
                    "slot": "2",
                    "type": "t_address"
                  }
                ],
                "numberOfBytes": "96"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "Create2Error()": [
                {
                  "notice": "create2 opcode failed"
                }
              ],
              "CreateError()": [
                {
                  "notice": "create opcode failed"
                }
              ],
              "InvalidNewController(address)": [
                {
                  "notice": "Invalid new controlling address `newController` for mutable split"
                }
              ],
              "InvalidSplit__AccountsAndAllocationsMismatch(uint256,uint256)": [
                {
                  "notice": "Array lengths of accounts & percentAllocations don't match (`accountsLength` != `allocationsLength`)"
                }
              ],
              "InvalidSplit__AccountsOutOfOrder(uint256)": [
                {
                  "notice": "Invalid accounts ordering at `index`"
                }
              ],
              "InvalidSplit__AllocationMustBePositive(uint256)": [
                {
                  "notice": "Invalid percentAllocation of zero at `index`"
                }
              ],
              "InvalidSplit__InvalidAllocationsSum(uint32)": [
                {
                  "notice": "Invalid percentAllocations sum `allocationsSum` must equal `PERCENTAGE_SCALE`"
                }
              ],
              "InvalidSplit__InvalidDistributorFee(uint32)": [
                {
                  "notice": "Invalid distributorFee `distributorFee` cannot be greater than 10% (1e5)"
                }
              ],
              "InvalidSplit__InvalidHash(bytes32)": [
                {
                  "notice": "Invalid hash `hash` from split data (accounts, percentAllocations, distributorFee)"
                }
              ],
              "InvalidSplit__TooFewAccounts(uint256)": [
                {
                  "notice": "Invalid number of accounts `accountsLength`, must have at least 2"
                }
              ],
              "Unauthorized(address)": [
                {
                  "notice": "Unauthorized sender `sender`"
                }
              ]
            },
            "events": {
              "CancelControlTransfer(address)": {
                "notice": "emitted after each canceled split control transfer"
              },
              "ControlTransfer(address,address,address)": {
                "notice": "emitted after each successful split control transfer"
              },
              "CreateSplit(address)": {
                "notice": "emitted after each successful split creation"
              },
              "DistributeERC20(address,address,uint256,address)": {
                "notice": "emitted after each successful ERC20 balance split"
              },
              "DistributeETH(address,uint256,address)": {
                "notice": "emitted after each successful ETH balance split"
              },
              "InitiateControlTransfer(address,address)": {
                "notice": "emitted after each initiated split control transfer"
              },
              "UpdateSplit(address)": {
                "notice": "emitted after each successful split update"
              },
              "Withdrawal(address,uint256,address[],uint256[])": {
                "notice": "emitted after each successful withdrawal"
              }
            },
            "kind": "user",
            "methods": {
              "PERCENTAGE_SCALE()": {
                "notice": "constant to scale uints into percentages (1e6 == 100%)"
              },
              "acceptControl(address)": {
                "notice": "Accepts transfer of the controlling address of mutable split `split`"
              },
              "cancelControlTransfer(address)": {
                "notice": "Cancels transfer of the controlling address of mutable split `split`"
              },
              "constructor": {
                "notice": "CONSTRUCTOR"
              },
              "createSplit(address[],uint32[],uint32,address)": {
                "notice": "Creates a new split with recipients `accounts` with ownerships `percentAllocations`, a keeper fee for splitting of `distributorFee` and the controlling address `controller`"
              },
              "distributeERC20(address,address,address[],uint32[],uint32,address)": {
                "notice": "Distributes the ERC20 `token` balance for split `split`"
              },
              "distributeETH(address,address[],uint32[],uint32,address)": {
                "notice": "Distributes the ETH balance for split `split`"
              },
              "getController(address)": {
                "notice": "Returns the current controller of split `split`"
              },
              "getERC20Balance(address,address)": {
                "notice": "Returns the ERC20 balance of token `token` for account `account`"
              },
              "getETHBalance(address)": {
                "notice": "Returns the current ETH balance of account `account`"
              },
              "getHash(address)": {
                "notice": "Returns the current hash of split `split`"
              },
              "getNewPotentialController(address)": {
                "notice": "Returns the current newPotentialController of split `split`"
              },
              "makeSplitImmutable(address)": {
                "notice": "Turns mutable split `split` immutable"
              },
              "predictImmutableSplitAddress(address[],uint32[],uint32)": {
                "notice": "Predicts the address for an immutable split created with recipients `accounts` with ownerships `percentAllocations` and a keeper fee for splitting of `distributorFee`"
              },
              "transferControl(address,address)": {
                "notice": "Begins transfer of the controlling address of mutable split `split` to `newController`"
              },
              "updateAndDistributeERC20(address,address,address[],uint32[],uint32,address)": {
                "notice": "Updates & distributes the ERC20 `token` balance for split `split`"
              },
              "updateAndDistributeETH(address,address[],uint32[],uint32,address)": {
                "notice": "Updates & distributes the ETH balance for split `split`"
              },
              "updateSplit(address,address[],uint32[],uint32)": {
                "notice": "Updates an existing split with recipients `accounts` with ownerships `percentAllocations` and a keeper fee for splitting of `distributorFee`"
              },
              "walletImplementation()": {
                "notice": "address of wallet implementation for split proxies"
              },
              "withdraw(address,uint256,address[])": {
                "notice": "Withdraw ETH &/ ERC20 balances for account `account`"
              }
            },
            "notice": "A composable and gas-efficient protocol for deploying splitter contracts.",
            "version": 1
          }
        }
      },
      "contracts/splits/SplitWallet.sol": {
        "SplitWallet": {
          "abi": [
            {
              "inputs": [],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "Unauthorized",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "ReceiveETH",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "contract ERC20",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "sendERC20ToMain",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "sendETHToMain",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "splitMain",
              "outputs": [
                {
                  "internalType": "contract ISplitMain",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "0xSplits <will@0xSplits.xyz>",
            "details": "`SplitProxy` handles `receive()` itself to avoid the gas cost with `DELEGATECALL`.",
            "events": {
              "ReceiveETH(address,uint256)": {
                "params": {
                  "amount": "Amount of ETH received",
                  "split": "Address of the split that received ETH"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "sendERC20ToMain(address,uint256)": {
                "details": "payable reduces gas cost; no vulnerability to accidentally lock  ETH introduced since fn call is restricted to SplitMain",
                "params": {
                  "amount": "Amount to send",
                  "token": "Token to send"
                }
              },
              "sendETHToMain(uint256)": {
                "details": "payable reduces gas cost; no vulnerability to accidentally lock  ETH introduced since fn call is restricted to SplitMain",
                "params": {
                  "amount": "Amount to send"
                }
              }
            },
            "title": "SplitWallet",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_1933": {
                  "entryPoint": null,
                  "id": 1933,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [],
              "linkReferences": {},
              "object": "60a060405234801561001057600080fd5b503360805260805161030f61004a60003960008181604b0152818160bc015281816101080152818161013c0152610186015261030f6000f3fe6080604052600436106100345760003560e01c80630e769b2b146100395780637c1f3ffe14610089578063ab0ebff41461009e575b600080fd5b34801561004557600080fd5b5061006d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61009c610097366004610288565b6100b1565b005b61009c6100ac3660046102c0565b610131565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100f9576040516282b42960e81b815260040160405180910390fd5b61012d6001600160a01b0383167f0000000000000000000000000000000000000000000000000000000000000000836101af565b5050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610179576040516282b42960e81b815260040160405180910390fd5b6101ac6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682610232565b50565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d116001600051141617169150508061022c5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064015b60405180910390fd5b50505050565b600080600080600085875af19050806102835760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610223565b505050565b6000806040838503121561029b57600080fd5b82356001600160a01b03811681146102b257600080fd5b946020939093013593505050565b6000602082840312156102d257600080fd5b503591905056fea26469706673582212200bb8e05942a07394b216a789ce945af3e46d15ad1f61166d75b0a6baaf3b884e64736f6c634300080e0033",
              "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLER PUSH1 0x80 MSTORE PUSH1 0x80 MLOAD PUSH2 0x30F PUSH2 0x4A PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH1 0x4B ADD MSTORE DUP2 DUP2 PUSH1 0xBC ADD MSTORE DUP2 DUP2 PUSH2 0x108 ADD MSTORE DUP2 DUP2 PUSH2 0x13C ADD MSTORE PUSH2 0x186 ADD MSTORE PUSH2 0x30F PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xE769B2B EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0x7C1F3FFE EQ PUSH2 0x89 JUMPI DUP1 PUSH4 0xAB0EBFF4 EQ PUSH2 0x9E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6D PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x9C PUSH2 0x97 CALLDATASIZE PUSH1 0x4 PUSH2 0x288 JUMP JUMPDEST PUSH2 0xB1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9C PUSH2 0xAC CALLDATASIZE PUSH1 0x4 PUSH2 0x2C0 JUMP JUMPDEST PUSH2 0x131 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xF9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x82B429 PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x12D PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH32 0x0 DUP4 PUSH2 0x1AF JUMP JUMPDEST POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x179 JUMPI PUSH1 0x40 MLOAD PUSH3 0x82B429 PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1AC PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP3 PUSH2 0x232 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE DUP4 PUSH1 0x4 DUP3 ADD MSTORE DUP3 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x0 PUSH1 0x44 DUP4 PUSH1 0x0 DUP10 GAS CALL RETURNDATASIZE ISZERO PUSH1 0x1F RETURNDATASIZE GT PUSH1 0x1 PUSH1 0x0 MLOAD EQ AND OR AND SWAP2 POP POP DUP1 PUSH2 0x22C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1514905394D1915497D19052531151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 GAS CALL SWAP1 POP DUP1 PUSH2 0x283 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x11551217D514905394D1915497D19052531151 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x223 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x29B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SIGNEXTEND 0xB8 0xE0 MSIZE TIMESTAMP LOG0 PUSH20 0x94B216A789CE945AF3E46D15AD1F61166D75B0A6 0xBA 0xAF EXTCODESIZE DUP9 0x4E PUSH5 0x736F6C6343 STOP ADDMOD 0xE STOP CALLER ",
              "sourceMap": "567:1796:3:-:0;;;1402:65;;;;;;;;;-1:-1:-1;1449:10:3;1426:34;;567:1796;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@safeTransferETH_409": {
                  "entryPoint": 562,
                  "id": 409,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@safeTransfer_451": {
                  "entryPoint": 431,
                  "id": 451,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@sendERC20ToMain_1972": {
                  "entryPoint": 177,
                  "id": 1972,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@sendETHToMain_1950": {
                  "entryPoint": 305,
                  "id": 1950,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@splitMain_1905": {
                  "entryPoint": null,
                  "id": 1905,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_tuple_t_contract$_ERC20_$387t_uint256": {
                  "entryPoint": 648,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 704,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_contract$_ISplitMain_$2191__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_8bf8f0d780f13740660fe63233b17f96cb1813889e7dce4121e55b817b367b72__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_d383913ea1996930a2623a0d739b8fc033c734c1d71d4759d3ccba1d3a719c29__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1487:6",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:6",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "134:102:6",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "144:26:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "156:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "167:2:6",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "152:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "152:18:6"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "144:4:6"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "186:9:6"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "201:6:6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "217:3:6",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "222:1:6",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "213:3:6"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "213:11:6"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "226:1:6",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "209:3:6"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "209:19:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "197:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "197:32:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "179:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "179:51:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "179:51:6"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_contract$_ISplitMain_$2191__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "103:9:6",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "114:6:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "125:4:6",
                            "type": ""
                          }
                        ],
                        "src": "14:222:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "341:267:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "387:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "396:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "399:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "389:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "389:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "389:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "362:7:6"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "371:9:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "358:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "358:23:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "383:2:6",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "354:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "354:32:6"
                              },
                              "nodeType": "YulIf",
                              "src": "351:52:6"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "412:36:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "438:9:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "425:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "425:23:6"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "416:5:6",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "511:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "520:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "523:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "513:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "513:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "513:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "470:5:6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "481:5:6"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "496:3:6",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "501:1:6",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "492:3:6"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "492:11:6"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "505:1:6",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "488:3:6"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "488:19:6"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "477:3:6"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "477:31:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "467:2:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "467:42:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "460:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "460:50:6"
                              },
                              "nodeType": "YulIf",
                              "src": "457:70:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "536:15:6",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "546:5:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "536:6:6"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "560:42:6",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "587:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "598:2:6",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "583:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "583:18:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "570:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "570:32:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "560:6:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_contract$_ERC20_$387t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "299:9:6",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "310:7:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "322:6:6",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "330:6:6",
                            "type": ""
                          }
                        ],
                        "src": "241:367:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "683:110:6",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "729:16:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "738:1:6",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "741:1:6",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "731:6:6"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "731:12:6"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "731:12:6"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "704:7:6"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "713:9:6"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "700:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "700:23:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "725:2:6",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "696:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "696:32:6"
                              },
                              "nodeType": "YulIf",
                              "src": "693:52:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "754:33:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "777:9:6"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "764:12:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "764:23:6"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "754:6:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "649:9:6",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "660:7:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "672:6:6",
                            "type": ""
                          }
                        ],
                        "src": "613:180:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "972:165:6",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "989:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1000:2:6",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "982:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "982:21:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "982:21:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1023:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1034:2:6",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1019:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1019:18:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1039:2:6",
                                    "type": "",
                                    "value": "15"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1012:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1012:30:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1012:30:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1062:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1073:2:6",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1058:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1058:18:6"
                                  },
                                  {
                                    "hexValue": "5452414e534645525f4641494c4544",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "1078:17:6",
                                    "type": "",
                                    "value": "TRANSFER_FAILED"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1051:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1051:45:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1051:45:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1105:26:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1117:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1128:2:6",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1113:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1113:18:6"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1105:4:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_8bf8f0d780f13740660fe63233b17f96cb1813889e7dce4121e55b817b367b72__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "949:9:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "963:4:6",
                            "type": ""
                          }
                        ],
                        "src": "798:339:6"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1316:169:6",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1333:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1344:2:6",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1326:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1326:21:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1326:21:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1367:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1378:2:6",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1363:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1363:18:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1383:2:6",
                                    "type": "",
                                    "value": "19"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1356:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1356:30:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1356:30:6"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1406:9:6"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1417:2:6",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1402:3:6"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1402:18:6"
                                  },
                                  {
                                    "hexValue": "4554485f5452414e534645525f4641494c4544",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "1422:21:6",
                                    "type": "",
                                    "value": "ETH_TRANSFER_FAILED"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1395:6:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1395:49:6"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1395:49:6"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1453:26:6",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1465:9:6"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1476:2:6",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1461:3:6"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1461:18:6"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1453:4:6"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_d383913ea1996930a2623a0d739b8fc033c734c1d71d4759d3ccba1d3a719c29__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1293:9:6",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1307:4:6",
                            "type": ""
                          }
                        ],
                        "src": "1142:343:6"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_encode_tuple_t_contract$_ISplitMain_$2191__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_contract$_ERC20_$387t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_8bf8f0d780f13740660fe63233b17f96cb1813889e7dce4121e55b817b367b72__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"TRANSFER_FAILED\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_d383913ea1996930a2623a0d739b8fc033c734c1d71d4759d3ccba1d3a719c29__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), \"ETH_TRANSFER_FAILED\")\n        tail := add(headStart, 96)\n    }\n}",
                  "id": 6,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {
                "1905": [
                  {
                    "length": 32,
                    "start": 75
                  },
                  {
                    "length": 32,
                    "start": 188
                  },
                  {
                    "length": 32,
                    "start": 264
                  },
                  {
                    "length": 32,
                    "start": 316
                  },
                  {
                    "length": 32,
                    "start": 390
                  }
                ]
              },
              "linkReferences": {},
              "object": "6080604052600436106100345760003560e01c80630e769b2b146100395780637c1f3ffe14610089578063ab0ebff41461009e575b600080fd5b34801561004557600080fd5b5061006d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61009c610097366004610288565b6100b1565b005b61009c6100ac3660046102c0565b610131565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100f9576040516282b42960e81b815260040160405180910390fd5b61012d6001600160a01b0383167f0000000000000000000000000000000000000000000000000000000000000000836101af565b5050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610179576040516282b42960e81b815260040160405180910390fd5b6101ac6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682610232565b50565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d116001600051141617169150508061022c5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064015b60405180910390fd5b50505050565b600080600080600085875af19050806102835760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610223565b505050565b6000806040838503121561029b57600080fd5b82356001600160a01b03811681146102b257600080fd5b946020939093013593505050565b6000602082840312156102d257600080fd5b503591905056fea26469706673582212200bb8e05942a07394b216a789ce945af3e46d15ad1f61166d75b0a6baaf3b884e64736f6c634300080e0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xE769B2B EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0x7C1F3FFE EQ PUSH2 0x89 JUMPI DUP1 PUSH4 0xAB0EBFF4 EQ PUSH2 0x9E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6D PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x9C PUSH2 0x97 CALLDATASIZE PUSH1 0x4 PUSH2 0x288 JUMP JUMPDEST PUSH2 0xB1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9C PUSH2 0xAC CALLDATASIZE PUSH1 0x4 PUSH2 0x2C0 JUMP JUMPDEST PUSH2 0x131 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xF9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x82B429 PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x12D PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH32 0x0 DUP4 PUSH2 0x1AF JUMP JUMPDEST POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x179 JUMPI PUSH1 0x40 MLOAD PUSH3 0x82B429 PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1AC PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP3 PUSH2 0x232 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE DUP4 PUSH1 0x4 DUP3 ADD MSTORE DUP3 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x0 PUSH1 0x44 DUP4 PUSH1 0x0 DUP10 GAS CALL RETURNDATASIZE ISZERO PUSH1 0x1F RETURNDATASIZE GT PUSH1 0x1 PUSH1 0x0 MLOAD EQ AND OR AND SWAP2 POP POP DUP1 PUSH2 0x22C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1514905394D1915497D19052531151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 GAS CALL SWAP1 POP DUP1 PUSH2 0x283 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x11551217D514905394D1915497D19052531151 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x223 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x29B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SIGNEXTEND 0xB8 0xE0 MSIZE TIMESTAMP LOG0 PUSH20 0x94B216A789CE945AF3E46D15AD1F61166D75B0A6 0xBA 0xAF EXTCODESIZE DUP9 0x4E PUSH5 0x736F6C6343 STOP ADDMOD 0xE STOP CALLER ",
              "sourceMap": "567:1796:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1116:37;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;197:32:6;;;179:51;;167:2;152:18;1116:37:3;;;;;;;2213:148;;;;;;:::i;:::-;;:::i;:::-;;1780:129;;;;;;:::i;:::-;;:::i;2213:148::-;1287:10;-1:-1:-1;;;;;1309:9:3;1287:32;;1283:59;;1328:14;;-1:-1:-1;;;1328:14:3;;;;;;;;;;;1283:59;2308:46:::1;-1:-1:-1::0;;;;;2308:18:3;::::1;2335:9;2347:6:::0;2308:18:::1;:46::i;:::-;2213:148:::0;;:::o;1780:129::-;1287:10;-1:-1:-1;;;;;1309:9:3;1287:32;;1283:59;;1328:14;;-1:-1:-1;;;1328:14:3;;;;;;;;;;;1283:59;1860:42:::1;-1:-1:-1::0;;;;;1868:9:3::1;1860:34;1895:6:::0;1860:34:::1;:42::i;:::-;1780:129:::0;:::o;2861:1456:1:-;2973:12;3100:4;3094:11;-1:-1:-1;;;3223:17:1;3216:93;3356:2;3352:1;3333:17;3329:25;3322:37;3436:6;3431:2;3412:17;3408:26;3401:42;4238:2;4235:1;4231:2;4212:17;4209:1;4202:5;4195;4190:51;3759:16;3752:24;3746:2;3728:16;3725:24;3721:1;3717;3711:8;3708:15;3704:46;3701:76;3501:754;3490:765;;;4283:7;4275:35;;;;-1:-1:-1;;;4275:35:1;;1000:2:6;4275:35:1;;;982:21:6;1039:2;1019:18;;;1012:30;-1:-1:-1;;;1058:18:6;;;1051:45;1113:18;;4275:35:1;;;;;;;;;2963:1354;2861:1456;;;:::o;796:296::-;868:12;1024:1;1021;1018;1015;1007:6;1003:2;996:5;991:35;980:46;;1054:7;1046:39;;;;-1:-1:-1;;;1046:39:1;;1344:2:6;1046:39:1;;;1326:21:6;1383:2;1363:18;;;1356:30;-1:-1:-1;;;1402:18:6;;;1395:49;1461:18;;1046:39:1;1142:343:6;1046:39:1;858:234;796:296;;:::o;241:367:6:-;322:6;330;383:2;371:9;362:7;358:23;354:32;351:52;;;399:1;396;389:12;351:52;425:23;;-1:-1:-1;;;;;477:31:6;;467:42;;457:70;;523:1;520;513:12;457:70;546:5;598:2;583:18;;;;570:32;;-1:-1:-1;;;241:367:6:o;613:180::-;672:6;725:2;713:9;704:7;700:23;696:32;693:52;;;741:1;738;731:12;693:52;-1:-1:-1;764:23:6;;613:180;-1:-1:-1;613:180:6:o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "156600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "sendERC20ToMain(address,uint256)": "infinite",
                "sendETHToMain(uint256)": "infinite",
                "splitMain()": "infinite"
              }
            },
            "methodIdentifiers": {
              "sendERC20ToMain(address,uint256)": "7c1f3ffe",
              "sendETHToMain(uint256)": "ab0ebff4",
              "splitMain()": "0e769b2b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.14+commit.80d49f37\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ReceiveETH\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendERC20ToMain\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendETHToMain\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"splitMain\",\"outputs\":[{\"internalType\":\"contract ISplitMain\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0xSplits <will@0xSplits.xyz>\",\"details\":\"`SplitProxy` handles `receive()` itself to avoid the gas cost with `DELEGATECALL`.\",\"events\":{\"ReceiveETH(address,uint256)\":{\"params\":{\"amount\":\"Amount of ETH received\",\"split\":\"Address of the split that received ETH\"}}},\"kind\":\"dev\",\"methods\":{\"sendERC20ToMain(address,uint256)\":{\"details\":\"payable reduces gas cost; no vulnerability to accidentally lock  ETH introduced since fn call is restricted to SplitMain\",\"params\":{\"amount\":\"Amount to send\",\"token\":\"Token to send\"}},\"sendETHToMain(uint256)\":{\"details\":\"payable reduces gas cost; no vulnerability to accidentally lock  ETH introduced since fn call is restricted to SplitMain\",\"params\":{\"amount\":\"Amount to send\"}}},\"title\":\"SplitWallet\",\"version\":1},\"userdoc\":{\"errors\":{\"Unauthorized()\":[{\"notice\":\"Unauthorized sender\"}]},\"events\":{\"ReceiveETH(address,uint256)\":{\"notice\":\"emitted after each successful ETH transfer to proxy\"}},\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"CONSTRUCTOR\"},\"sendERC20ToMain(address,uint256)\":{\"notice\":\"Sends amount `amount` of ERC20 `token` in proxy to SplitMain\"},\"sendETHToMain(uint256)\":{\"notice\":\"Sends amount `amount` of ETH in proxy to SplitMain\"},\"splitMain()\":{\"notice\":\"address of SplitMain for split distributions & EOA/SC withdrawals\"}},\"notice\":\"The implementation logic for `SplitProxy`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/splits/SplitWallet.sol\":\"SplitWallet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@rari-capital/solmate/src/tokens/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.8.0;\\n\\n/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.\\n/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)\\n/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)\\n/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.\\nabstract contract ERC20 {\\n    /*//////////////////////////////////////////////////////////////\\n                                 EVENTS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            METADATA STORAGE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    string public name;\\n\\n    string public symbol;\\n\\n    uint8 public immutable decimals;\\n\\n    /*//////////////////////////////////////////////////////////////\\n                              ERC20 STORAGE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    uint256 public totalSupply;\\n\\n    mapping(address => uint256) public balanceOf;\\n\\n    mapping(address => mapping(address => uint256)) public allowance;\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            EIP-2612 STORAGE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    uint256 internal immutable INITIAL_CHAIN_ID;\\n\\n    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;\\n\\n    mapping(address => uint256) public nonces;\\n\\n    /*//////////////////////////////////////////////////////////////\\n                               CONSTRUCTOR\\n    //////////////////////////////////////////////////////////////*/\\n\\n    constructor(\\n        string memory _name,\\n        string memory _symbol,\\n        uint8 _decimals\\n    ) {\\n        name = _name;\\n        symbol = _symbol;\\n        decimals = _decimals;\\n\\n        INITIAL_CHAIN_ID = block.chainid;\\n        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                               ERC20 LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function approve(address spender, uint256 amount) public virtual returns (bool) {\\n        allowance[msg.sender][spender] = amount;\\n\\n        emit Approval(msg.sender, spender, amount);\\n\\n        return true;\\n    }\\n\\n    function transfer(address to, uint256 amount) public virtual returns (bool) {\\n        balanceOf[msg.sender] -= amount;\\n\\n        // Cannot overflow because the sum of all user\\n        // balances can't exceed the max uint256 value.\\n        unchecked {\\n            balanceOf[to] += amount;\\n        }\\n\\n        emit Transfer(msg.sender, to, amount);\\n\\n        return true;\\n    }\\n\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual returns (bool) {\\n        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.\\n\\n        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;\\n\\n        balanceOf[from] -= amount;\\n\\n        // Cannot overflow because the sum of all user\\n        // balances can't exceed the max uint256 value.\\n        unchecked {\\n            balanceOf[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        return true;\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                             EIP-2612 LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) public virtual {\\n        require(deadline >= block.timestamp, \\\"PERMIT_DEADLINE_EXPIRED\\\");\\n\\n        // Unchecked because the only math done is incrementing\\n        // the owner's nonce which cannot realistically overflow.\\n        unchecked {\\n            address recoveredAddress = ecrecover(\\n                keccak256(\\n                    abi.encodePacked(\\n                        \\\"\\\\x19\\\\x01\\\",\\n                        DOMAIN_SEPARATOR(),\\n                        keccak256(\\n                            abi.encode(\\n                                keccak256(\\n                                    \\\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\\\"\\n                                ),\\n                                owner,\\n                                spender,\\n                                value,\\n                                nonces[owner]++,\\n                                deadline\\n                            )\\n                        )\\n                    )\\n                ),\\n                v,\\n                r,\\n                s\\n            );\\n\\n            require(recoveredAddress != address(0) && recoveredAddress == owner, \\\"INVALID_SIGNER\\\");\\n\\n            allowance[recoveredAddress][spender] = value;\\n        }\\n\\n        emit Approval(owner, spender, value);\\n    }\\n\\n    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();\\n    }\\n\\n    function computeDomainSeparator() internal view virtual returns (bytes32) {\\n        return\\n            keccak256(\\n                abi.encode(\\n                    keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"),\\n                    keccak256(bytes(name)),\\n                    keccak256(\\\"1\\\"),\\n                    block.chainid,\\n                    address(this)\\n                )\\n            );\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                        INTERNAL MINT/BURN LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function _mint(address to, uint256 amount) internal virtual {\\n        totalSupply += amount;\\n\\n        // Cannot overflow because the sum of all user\\n        // balances can't exceed the max uint256 value.\\n        unchecked {\\n            balanceOf[to] += amount;\\n        }\\n\\n        emit Transfer(address(0), to, amount);\\n    }\\n\\n    function _burn(address from, uint256 amount) internal virtual {\\n        balanceOf[from] -= amount;\\n\\n        // Cannot underflow because a user's balance\\n        // will never be larger than the total supply.\\n        unchecked {\\n            totalSupply -= amount;\\n        }\\n\\n        emit Transfer(from, address(0), amount);\\n    }\\n}\\n\",\"keccak256\":\"0x0240f7703cff32a61ee3e9fbb339e09a944260432a9ef37debf3692b1a6c8049\",\"license\":\"AGPL-3.0-only\"},\"@rari-capital/solmate/src/utils/SafeTransferLib.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.8.0;\\n\\nimport {ERC20} from \\\"../tokens/ERC20.sol\\\";\\n\\n/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.\\n/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)\\n/// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.\\n/// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller.\\nlibrary SafeTransferLib {\\n    /*//////////////////////////////////////////////////////////////\\n                             ETH OPERATIONS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function safeTransferETH(address to, uint256 amount) internal {\\n        bool success;\\n\\n        assembly {\\n            // Transfer the ETH and store if it succeeded or not.\\n            success := call(gas(), to, amount, 0, 0, 0, 0)\\n        }\\n\\n        require(success, \\\"ETH_TRANSFER_FAILED\\\");\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            ERC20 OPERATIONS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function safeTransferFrom(\\n        ERC20 token,\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        bool success;\\n\\n        assembly {\\n            // Get a pointer to some free memory.\\n            let freeMemoryPointer := mload(0x40)\\n\\n            // Write the abi-encoded calldata into memory, beginning with the function selector.\\n            mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000)\\n            mstore(add(freeMemoryPointer, 4), from) // Append the \\\"from\\\" argument.\\n            mstore(add(freeMemoryPointer, 36), to) // Append the \\\"to\\\" argument.\\n            mstore(add(freeMemoryPointer, 68), amount) // Append the \\\"amount\\\" argument.\\n\\n            success := and(\\n                // Set success to whether the call reverted, if not we check it either\\n                // returned exactly 1 (can't just be non-zero data), or had no return data.\\n                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),\\n                // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3.\\n                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.\\n                // Counterintuitively, this call must be positioned second to the or() call in the\\n                // surrounding and() call or else returndatasize() will be zero during the computation.\\n                call(gas(), token, 0, freeMemoryPointer, 100, 0, 32)\\n            )\\n        }\\n\\n        require(success, \\\"TRANSFER_FROM_FAILED\\\");\\n    }\\n\\n    function safeTransfer(\\n        ERC20 token,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        bool success;\\n\\n        assembly {\\n            // Get a pointer to some free memory.\\n            let freeMemoryPointer := mload(0x40)\\n\\n            // Write the abi-encoded calldata into memory, beginning with the function selector.\\n            mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000)\\n            mstore(add(freeMemoryPointer, 4), to) // Append the \\\"to\\\" argument.\\n            mstore(add(freeMemoryPointer, 36), amount) // Append the \\\"amount\\\" argument.\\n\\n            success := and(\\n                // Set success to whether the call reverted, if not we check it either\\n                // returned exactly 1 (can't just be non-zero data), or had no return data.\\n                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),\\n                // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.\\n                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.\\n                // Counterintuitively, this call must be positioned second to the or() call in the\\n                // surrounding and() call or else returndatasize() will be zero during the computation.\\n                call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)\\n            )\\n        }\\n\\n        require(success, \\\"TRANSFER_FAILED\\\");\\n    }\\n\\n    function safeApprove(\\n        ERC20 token,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        bool success;\\n\\n        assembly {\\n            // Get a pointer to some free memory.\\n            let freeMemoryPointer := mload(0x40)\\n\\n            // Write the abi-encoded calldata into memory, beginning with the function selector.\\n            mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000)\\n            mstore(add(freeMemoryPointer, 4), to) // Append the \\\"to\\\" argument.\\n            mstore(add(freeMemoryPointer, 36), amount) // Append the \\\"amount\\\" argument.\\n\\n            success := and(\\n                // Set success to whether the call reverted, if not we check it either\\n                // returned exactly 1 (can't just be non-zero data), or had no return data.\\n                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),\\n                // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.\\n                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.\\n                // Counterintuitively, this call must be positioned second to the or() call in the\\n                // surrounding and() call or else returndatasize() will be zero during the computation.\\n                call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)\\n            )\\n        }\\n\\n        require(success, \\\"APPROVE_FAILED\\\");\\n    }\\n}\\n\",\"keccak256\":\"0xa28a1515702793c6b56b97272f75e05890fd82aa2e7ec47b41d4d56a81023f69\",\"license\":\"AGPL-3.0-only\"},\"contracts/splits/SplitWallet.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.4;\\n\\nimport {ISplitMain} from './interfaces/ISplitMain.sol';\\nimport {ERC20} from '@rari-capital/solmate/src/tokens/ERC20.sol';\\nimport {SafeTransferLib} from '@rari-capital/solmate/src/utils/SafeTransferLib.sol';\\n\\n/**\\n * ERRORS\\n */\\n\\n/// @notice Unauthorized sender\\nerror Unauthorized();\\n\\n/**\\n * @title SplitWallet\\n * @author 0xSplits <will@0xSplits.xyz>\\n * @notice The implementation logic for `SplitProxy`.\\n * @dev `SplitProxy` handles `receive()` itself to avoid the gas cost with `DELEGATECALL`.\\n */\\ncontract SplitWallet {\\n    using SafeTransferLib for address;\\n    using SafeTransferLib for ERC20;\\n\\n    /**\\n     * EVENTS\\n     */\\n\\n    /** @notice emitted after each successful ETH transfer to proxy\\n     *  @param split Address of the split that received ETH\\n     *  @param amount Amount of ETH received\\n     */\\n    event ReceiveETH(address indexed split, uint256 amount);\\n\\n    /**\\n     * STORAGE\\n     */\\n\\n    /**\\n     * STORAGE - CONSTANTS & IMMUTABLES\\n     */\\n\\n    /// @notice address of SplitMain for split distributions & EOA/SC withdrawals\\n    ISplitMain public immutable splitMain;\\n\\n    /**\\n     * MODIFIERS\\n     */\\n\\n    /// @notice Reverts if the sender isn't SplitMain\\n    modifier onlySplitMain() {\\n        if (msg.sender != address(splitMain)) revert Unauthorized();\\n        _;\\n    }\\n\\n    /**\\n     * CONSTRUCTOR\\n     */\\n\\n    constructor() {\\n        splitMain = ISplitMain(msg.sender);\\n    }\\n\\n    /**\\n     * FUNCTIONS - PUBLIC & EXTERNAL\\n     */\\n\\n    /** @notice Sends amount `amount` of ETH in proxy to SplitMain\\n     *  @dev payable reduces gas cost; no vulnerability to accidentally lock\\n     *  ETH introduced since fn call is restricted to SplitMain\\n     *  @param amount Amount to send\\n     */\\n    function sendETHToMain(uint256 amount) external payable onlySplitMain {\\n        address(splitMain).safeTransferETH(amount);\\n    }\\n\\n    /** @notice Sends amount `amount` of ERC20 `token` in proxy to SplitMain\\n     *  @dev payable reduces gas cost; no vulnerability to accidentally lock\\n     *  ETH introduced since fn call is restricted to SplitMain\\n     *  @param token Token to send\\n     *  @param amount Amount to send\\n     */\\n    function sendERC20ToMain(ERC20 token, uint256 amount) external payable onlySplitMain {\\n        token.safeTransfer(address(splitMain), amount);\\n    }\\n}\\n\",\"keccak256\":\"0x0dcc554a38e302879fece74d5ae2fdcef5a80190575cd5d22c29a94a7d0696c7\",\"license\":\"GPL-3.0-or-later\"},\"contracts/splits/interfaces/ISplitMain.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.4;\\n\\nimport {ERC20} from '@rari-capital/solmate/src/tokens/ERC20.sol';\\n\\n/**\\n * @title ISplitMain\\n * @author 0xSplits <will@0xSplits.xyz>\\n */\\ninterface ISplitMain {\\n    /**\\n     * FUNCTIONS\\n     */\\n\\n    function walletImplementation() external returns (address);\\n\\n    function createSplit(\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address controller\\n    ) external returns (address);\\n\\n    function predictImmutableSplitAddress(\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee\\n    ) external view returns (address);\\n\\n    function updateSplit(\\n        address split,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee\\n    ) external;\\n\\n    function transferControl(address split, address newController) external;\\n\\n    function cancelControlTransfer(address split) external;\\n\\n    function acceptControl(address split) external;\\n\\n    function makeSplitImmutable(address split) external;\\n\\n    function distributeETH(\\n        address split,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) external;\\n\\n    function updateAndDistributeETH(\\n        address split,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) external;\\n\\n    function distributeERC20(\\n        address split,\\n        ERC20 token,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) external;\\n\\n    function updateAndDistributeERC20(\\n        address split,\\n        ERC20 token,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) external;\\n\\n    function withdraw(\\n        address account,\\n        uint256 withdrawETH,\\n        ERC20[] calldata tokens\\n    ) external;\\n\\n    /**\\n     * EVENTS\\n     */\\n\\n    /** @notice emitted after each successful split creation\\n     *  @param split Address of the created split\\n     */\\n    event CreateSplit(address indexed split);\\n\\n    /** @notice emitted after each successful split update\\n     *  @param split Address of the updated split\\n     */\\n    event UpdateSplit(address indexed split);\\n\\n    /** @notice emitted after each initiated split control transfer\\n     *  @param split Address of the split control transfer was initiated for\\n     *  @param newPotentialController Address of the split's new potential controller\\n     */\\n    event InitiateControlTransfer(address indexed split, address indexed newPotentialController);\\n\\n    /** @notice emitted after each canceled split control transfer\\n     *  @param split Address of the split control transfer was canceled for\\n     */\\n    event CancelControlTransfer(address indexed split);\\n\\n    /** @notice emitted after each successful split control transfer\\n     *  @param split Address of the split control was transferred for\\n     *  @param previousController Address of the split's previous controller\\n     *  @param newController Address of the split's new controller\\n     */\\n    event ControlTransfer(address indexed split, address indexed previousController, address indexed newController);\\n\\n    /** @notice emitted after each successful ETH balance split\\n     *  @param split Address of the split that distributed its balance\\n     *  @param amount Amount of ETH distributed\\n     *  @param distributorAddress Address to credit distributor fee to\\n     */\\n    event DistributeETH(address indexed split, uint256 amount, address indexed distributorAddress);\\n\\n    /** @notice emitted after each successful ERC20 balance split\\n     *  @param split Address of the split that distributed its balance\\n     *  @param token Address of ERC20 distributed\\n     *  @param amount Amount of ERC20 distributed\\n     *  @param distributorAddress Address to credit distributor fee to\\n     */\\n    event DistributeERC20(\\n        address indexed split,\\n        ERC20 indexed token,\\n        uint256 amount,\\n        address indexed distributorAddress\\n    );\\n\\n    /** @notice emitted after each successful withdrawal\\n     *  @param account Address that funds were withdrawn to\\n     *  @param ethAmount Amount of ETH withdrawn\\n     *  @param tokens Addresses of ERC20s withdrawn\\n     *  @param tokenAmounts Amounts of corresponding ERC20s withdrawn\\n     */\\n    event Withdrawal(address indexed account, uint256 ethAmount, ERC20[] tokens, uint256[] tokenAmounts);\\n}\\n\",\"keccak256\":\"0xcf2e72575544c2d95a855846782b7eb66ca0315472a1e11f9bb9da664dcecf90\",\"license\":\"GPL-3.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "Unauthorized()": [
                {
                  "notice": "Unauthorized sender"
                }
              ]
            },
            "events": {
              "ReceiveETH(address,uint256)": {
                "notice": "emitted after each successful ETH transfer to proxy"
              }
            },
            "kind": "user",
            "methods": {
              "constructor": {
                "notice": "CONSTRUCTOR"
              },
              "sendERC20ToMain(address,uint256)": {
                "notice": "Sends amount `amount` of ERC20 `token` in proxy to SplitMain"
              },
              "sendETHToMain(uint256)": {
                "notice": "Sends amount `amount` of ETH in proxy to SplitMain"
              },
              "splitMain()": {
                "notice": "address of SplitMain for split distributions & EOA/SC withdrawals"
              }
            },
            "notice": "The implementation logic for `SplitProxy`.",
            "version": 1
          }
        }
      },
      "contracts/splits/interfaces/ISplitMain.sol": {
        "ISplitMain": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "name": "CancelControlTransfer",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "previousController",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newController",
                  "type": "address"
                }
              ],
              "name": "ControlTransfer",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "name": "CreateSplit",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "contract ERC20",
                  "name": "token",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "distributorAddress",
                  "type": "address"
                }
              ],
              "name": "DistributeERC20",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "distributorAddress",
                  "type": "address"
                }
              ],
              "name": "DistributeETH",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newPotentialController",
                  "type": "address"
                }
              ],
              "name": "InitiateControlTransfer",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "name": "UpdateSplit",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "ethAmount",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "contract ERC20[]",
                  "name": "tokens",
                  "type": "address[]"
                },
                {
                  "indexed": false,
                  "internalType": "uint256[]",
                  "name": "tokenAmounts",
                  "type": "uint256[]"
                }
              ],
              "name": "Withdrawal",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "name": "acceptControl",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "name": "cancelControlTransfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "percentAllocations",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint32",
                  "name": "distributorFee",
                  "type": "uint32"
                },
                {
                  "internalType": "address",
                  "name": "controller",
                  "type": "address"
                }
              ],
              "name": "createSplit",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "internalType": "contract ERC20",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "percentAllocations",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint32",
                  "name": "distributorFee",
                  "type": "uint32"
                },
                {
                  "internalType": "address",
                  "name": "distributorAddress",
                  "type": "address"
                }
              ],
              "name": "distributeERC20",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "percentAllocations",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint32",
                  "name": "distributorFee",
                  "type": "uint32"
                },
                {
                  "internalType": "address",
                  "name": "distributorAddress",
                  "type": "address"
                }
              ],
              "name": "distributeETH",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                }
              ],
              "name": "makeSplitImmutable",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "percentAllocations",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint32",
                  "name": "distributorFee",
                  "type": "uint32"
                }
              ],
              "name": "predictImmutableSplitAddress",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "newController",
                  "type": "address"
                }
              ],
              "name": "transferControl",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "internalType": "contract ERC20",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "percentAllocations",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint32",
                  "name": "distributorFee",
                  "type": "uint32"
                },
                {
                  "internalType": "address",
                  "name": "distributorAddress",
                  "type": "address"
                }
              ],
              "name": "updateAndDistributeERC20",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "percentAllocations",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint32",
                  "name": "distributorFee",
                  "type": "uint32"
                },
                {
                  "internalType": "address",
                  "name": "distributorAddress",
                  "type": "address"
                }
              ],
              "name": "updateAndDistributeETH",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "split",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "percentAllocations",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint32",
                  "name": "distributorFee",
                  "type": "uint32"
                }
              ],
              "name": "updateSplit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "walletImplementation",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "withdrawETH",
                  "type": "uint256"
                },
                {
                  "internalType": "contract ERC20[]",
                  "name": "tokens",
                  "type": "address[]"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "0xSplits <will@0xSplits.xyz>",
            "events": {
              "CancelControlTransfer(address)": {
                "params": {
                  "split": "Address of the split control transfer was canceled for"
                }
              },
              "ControlTransfer(address,address,address)": {
                "params": {
                  "newController": "Address of the split's new controller",
                  "previousController": "Address of the split's previous controller",
                  "split": "Address of the split control was transferred for"
                }
              },
              "CreateSplit(address)": {
                "params": {
                  "split": "Address of the created split"
                }
              },
              "DistributeERC20(address,address,uint256,address)": {
                "params": {
                  "amount": "Amount of ERC20 distributed",
                  "distributorAddress": "Address to credit distributor fee to",
                  "split": "Address of the split that distributed its balance",
                  "token": "Address of ERC20 distributed"
                }
              },
              "DistributeETH(address,uint256,address)": {
                "params": {
                  "amount": "Amount of ETH distributed",
                  "distributorAddress": "Address to credit distributor fee to",
                  "split": "Address of the split that distributed its balance"
                }
              },
              "InitiateControlTransfer(address,address)": {
                "params": {
                  "newPotentialController": "Address of the split's new potential controller",
                  "split": "Address of the split control transfer was initiated for"
                }
              },
              "UpdateSplit(address)": {
                "params": {
                  "split": "Address of the updated split"
                }
              },
              "Withdrawal(address,uint256,address[],uint256[])": {
                "params": {
                  "account": "Address that funds were withdrawn to",
                  "ethAmount": "Amount of ETH withdrawn",
                  "tokenAmounts": "Amounts of corresponding ERC20s withdrawn",
                  "tokens": "Addresses of ERC20s withdrawn"
                }
              }
            },
            "kind": "dev",
            "methods": {},
            "title": "ISplitMain",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptControl(address)": "c7de6440",
              "cancelControlTransfer(address)": "1267c6da",
              "createSplit(address[],uint32[],uint32,address)": "7601f782",
              "distributeERC20(address,address,address[],uint32[],uint32,address)": "15811302",
              "distributeETH(address,address[],uint32[],uint32,address)": "e61cb05e",
              "makeSplitImmutable(address)": "189cbaa0",
              "predictImmutableSplitAddress(address[],uint32[],uint32)": "52844dd3",
              "transferControl(address,address)": "d0e4b2f4",
              "updateAndDistributeERC20(address,address,address[],uint32[],uint32,address)": "77b1e4e9",
              "updateAndDistributeETH(address,address[],uint32[],uint32,address)": "a5e3909e",
              "updateSplit(address,address[],uint32[],uint32)": "ecef0ace",
              "walletImplementation()": "8117abc1",
              "withdraw(address,uint256,address[])": "6e5f6919"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.14+commit.80d49f37\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"name\":\"CancelControlTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousController\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newController\",\"type\":\"address\"}],\"name\":\"ControlTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"name\":\"CreateSplit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract ERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"distributorAddress\",\"type\":\"address\"}],\"name\":\"DistributeERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"distributorAddress\",\"type\":\"address\"}],\"name\":\"DistributeETH\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newPotentialController\",\"type\":\"address\"}],\"name\":\"InitiateControlTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"name\":\"UpdateSplit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"contract ERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"name\":\"acceptControl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"name\":\"cancelControlTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"percentAllocations\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32\",\"name\":\"distributorFee\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"createSplit\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"internalType\":\"contract ERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"percentAllocations\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32\",\"name\":\"distributorFee\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"distributorAddress\",\"type\":\"address\"}],\"name\":\"distributeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"percentAllocations\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32\",\"name\":\"distributorFee\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"distributorAddress\",\"type\":\"address\"}],\"name\":\"distributeETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"}],\"name\":\"makeSplitImmutable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"percentAllocations\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32\",\"name\":\"distributorFee\",\"type\":\"uint32\"}],\"name\":\"predictImmutableSplitAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newController\",\"type\":\"address\"}],\"name\":\"transferControl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"internalType\":\"contract ERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"percentAllocations\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32\",\"name\":\"distributorFee\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"distributorAddress\",\"type\":\"address\"}],\"name\":\"updateAndDistributeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"percentAllocations\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32\",\"name\":\"distributorFee\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"distributorAddress\",\"type\":\"address\"}],\"name\":\"updateAndDistributeETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"split\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"percentAllocations\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32\",\"name\":\"distributorFee\",\"type\":\"uint32\"}],\"name\":\"updateSplit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"walletImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"withdrawETH\",\"type\":\"uint256\"},{\"internalType\":\"contract ERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0xSplits <will@0xSplits.xyz>\",\"events\":{\"CancelControlTransfer(address)\":{\"params\":{\"split\":\"Address of the split control transfer was canceled for\"}},\"ControlTransfer(address,address,address)\":{\"params\":{\"newController\":\"Address of the split's new controller\",\"previousController\":\"Address of the split's previous controller\",\"split\":\"Address of the split control was transferred for\"}},\"CreateSplit(address)\":{\"params\":{\"split\":\"Address of the created split\"}},\"DistributeERC20(address,address,uint256,address)\":{\"params\":{\"amount\":\"Amount of ERC20 distributed\",\"distributorAddress\":\"Address to credit distributor fee to\",\"split\":\"Address of the split that distributed its balance\",\"token\":\"Address of ERC20 distributed\"}},\"DistributeETH(address,uint256,address)\":{\"params\":{\"amount\":\"Amount of ETH distributed\",\"distributorAddress\":\"Address to credit distributor fee to\",\"split\":\"Address of the split that distributed its balance\"}},\"InitiateControlTransfer(address,address)\":{\"params\":{\"newPotentialController\":\"Address of the split's new potential controller\",\"split\":\"Address of the split control transfer was initiated for\"}},\"UpdateSplit(address)\":{\"params\":{\"split\":\"Address of the updated split\"}},\"Withdrawal(address,uint256,address[],uint256[])\":{\"params\":{\"account\":\"Address that funds were withdrawn to\",\"ethAmount\":\"Amount of ETH withdrawn\",\"tokenAmounts\":\"Amounts of corresponding ERC20s withdrawn\",\"tokens\":\"Addresses of ERC20s withdrawn\"}}},\"kind\":\"dev\",\"methods\":{},\"title\":\"ISplitMain\",\"version\":1},\"userdoc\":{\"events\":{\"CancelControlTransfer(address)\":{\"notice\":\"emitted after each canceled split control transfer\"},\"ControlTransfer(address,address,address)\":{\"notice\":\"emitted after each successful split control transfer\"},\"CreateSplit(address)\":{\"notice\":\"emitted after each successful split creation\"},\"DistributeERC20(address,address,uint256,address)\":{\"notice\":\"emitted after each successful ERC20 balance split\"},\"DistributeETH(address,uint256,address)\":{\"notice\":\"emitted after each successful ETH balance split\"},\"InitiateControlTransfer(address,address)\":{\"notice\":\"emitted after each initiated split control transfer\"},\"UpdateSplit(address)\":{\"notice\":\"emitted after each successful split update\"},\"Withdrawal(address,uint256,address[],uint256[])\":{\"notice\":\"emitted after each successful withdrawal\"}},\"kind\":\"user\",\"methods\":{\"walletImplementation()\":{\"notice\":\"FUNCTIONS\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/splits/interfaces/ISplitMain.sol\":\"ISplitMain\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@rari-capital/solmate/src/tokens/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0-only\\npragma solidity >=0.8.0;\\n\\n/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.\\n/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)\\n/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)\\n/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.\\nabstract contract ERC20 {\\n    /*//////////////////////////////////////////////////////////////\\n                                 EVENTS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            METADATA STORAGE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    string public name;\\n\\n    string public symbol;\\n\\n    uint8 public immutable decimals;\\n\\n    /*//////////////////////////////////////////////////////////////\\n                              ERC20 STORAGE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    uint256 public totalSupply;\\n\\n    mapping(address => uint256) public balanceOf;\\n\\n    mapping(address => mapping(address => uint256)) public allowance;\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            EIP-2612 STORAGE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    uint256 internal immutable INITIAL_CHAIN_ID;\\n\\n    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;\\n\\n    mapping(address => uint256) public nonces;\\n\\n    /*//////////////////////////////////////////////////////////////\\n                               CONSTRUCTOR\\n    //////////////////////////////////////////////////////////////*/\\n\\n    constructor(\\n        string memory _name,\\n        string memory _symbol,\\n        uint8 _decimals\\n    ) {\\n        name = _name;\\n        symbol = _symbol;\\n        decimals = _decimals;\\n\\n        INITIAL_CHAIN_ID = block.chainid;\\n        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                               ERC20 LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function approve(address spender, uint256 amount) public virtual returns (bool) {\\n        allowance[msg.sender][spender] = amount;\\n\\n        emit Approval(msg.sender, spender, amount);\\n\\n        return true;\\n    }\\n\\n    function transfer(address to, uint256 amount) public virtual returns (bool) {\\n        balanceOf[msg.sender] -= amount;\\n\\n        // Cannot overflow because the sum of all user\\n        // balances can't exceed the max uint256 value.\\n        unchecked {\\n            balanceOf[to] += amount;\\n        }\\n\\n        emit Transfer(msg.sender, to, amount);\\n\\n        return true;\\n    }\\n\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual returns (bool) {\\n        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.\\n\\n        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;\\n\\n        balanceOf[from] -= amount;\\n\\n        // Cannot overflow because the sum of all user\\n        // balances can't exceed the max uint256 value.\\n        unchecked {\\n            balanceOf[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        return true;\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                             EIP-2612 LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) public virtual {\\n        require(deadline >= block.timestamp, \\\"PERMIT_DEADLINE_EXPIRED\\\");\\n\\n        // Unchecked because the only math done is incrementing\\n        // the owner's nonce which cannot realistically overflow.\\n        unchecked {\\n            address recoveredAddress = ecrecover(\\n                keccak256(\\n                    abi.encodePacked(\\n                        \\\"\\\\x19\\\\x01\\\",\\n                        DOMAIN_SEPARATOR(),\\n                        keccak256(\\n                            abi.encode(\\n                                keccak256(\\n                                    \\\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\\\"\\n                                ),\\n                                owner,\\n                                spender,\\n                                value,\\n                                nonces[owner]++,\\n                                deadline\\n                            )\\n                        )\\n                    )\\n                ),\\n                v,\\n                r,\\n                s\\n            );\\n\\n            require(recoveredAddress != address(0) && recoveredAddress == owner, \\\"INVALID_SIGNER\\\");\\n\\n            allowance[recoveredAddress][spender] = value;\\n        }\\n\\n        emit Approval(owner, spender, value);\\n    }\\n\\n    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();\\n    }\\n\\n    function computeDomainSeparator() internal view virtual returns (bytes32) {\\n        return\\n            keccak256(\\n                abi.encode(\\n                    keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"),\\n                    keccak256(bytes(name)),\\n                    keccak256(\\\"1\\\"),\\n                    block.chainid,\\n                    address(this)\\n                )\\n            );\\n    }\\n\\n    /*//////////////////////////////////////////////////////////////\\n                        INTERNAL MINT/BURN LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function _mint(address to, uint256 amount) internal virtual {\\n        totalSupply += amount;\\n\\n        // Cannot overflow because the sum of all user\\n        // balances can't exceed the max uint256 value.\\n        unchecked {\\n            balanceOf[to] += amount;\\n        }\\n\\n        emit Transfer(address(0), to, amount);\\n    }\\n\\n    function _burn(address from, uint256 amount) internal virtual {\\n        balanceOf[from] -= amount;\\n\\n        // Cannot underflow because a user's balance\\n        // will never be larger than the total supply.\\n        unchecked {\\n            totalSupply -= amount;\\n        }\\n\\n        emit Transfer(from, address(0), amount);\\n    }\\n}\\n\",\"keccak256\":\"0x0240f7703cff32a61ee3e9fbb339e09a944260432a9ef37debf3692b1a6c8049\",\"license\":\"AGPL-3.0-only\"},\"contracts/splits/interfaces/ISplitMain.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.4;\\n\\nimport {ERC20} from '@rari-capital/solmate/src/tokens/ERC20.sol';\\n\\n/**\\n * @title ISplitMain\\n * @author 0xSplits <will@0xSplits.xyz>\\n */\\ninterface ISplitMain {\\n    /**\\n     * FUNCTIONS\\n     */\\n\\n    function walletImplementation() external returns (address);\\n\\n    function createSplit(\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address controller\\n    ) external returns (address);\\n\\n    function predictImmutableSplitAddress(\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee\\n    ) external view returns (address);\\n\\n    function updateSplit(\\n        address split,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee\\n    ) external;\\n\\n    function transferControl(address split, address newController) external;\\n\\n    function cancelControlTransfer(address split) external;\\n\\n    function acceptControl(address split) external;\\n\\n    function makeSplitImmutable(address split) external;\\n\\n    function distributeETH(\\n        address split,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) external;\\n\\n    function updateAndDistributeETH(\\n        address split,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) external;\\n\\n    function distributeERC20(\\n        address split,\\n        ERC20 token,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) external;\\n\\n    function updateAndDistributeERC20(\\n        address split,\\n        ERC20 token,\\n        address[] calldata accounts,\\n        uint32[] calldata percentAllocations,\\n        uint32 distributorFee,\\n        address distributorAddress\\n    ) external;\\n\\n    function withdraw(\\n        address account,\\n        uint256 withdrawETH,\\n        ERC20[] calldata tokens\\n    ) external;\\n\\n    /**\\n     * EVENTS\\n     */\\n\\n    /** @notice emitted after each successful split creation\\n     *  @param split Address of the created split\\n     */\\n    event CreateSplit(address indexed split);\\n\\n    /** @notice emitted after each successful split update\\n     *  @param split Address of the updated split\\n     */\\n    event UpdateSplit(address indexed split);\\n\\n    /** @notice emitted after each initiated split control transfer\\n     *  @param split Address of the split control transfer was initiated for\\n     *  @param newPotentialController Address of the split's new potential controller\\n     */\\n    event InitiateControlTransfer(address indexed split, address indexed newPotentialController);\\n\\n    /** @notice emitted after each canceled split control transfer\\n     *  @param split Address of the split control transfer was canceled for\\n     */\\n    event CancelControlTransfer(address indexed split);\\n\\n    /** @notice emitted after each successful split control transfer\\n     *  @param split Address of the split control was transferred for\\n     *  @param previousController Address of the split's previous controller\\n     *  @param newController Address of the split's new controller\\n     */\\n    event ControlTransfer(address indexed split, address indexed previousController, address indexed newController);\\n\\n    /** @notice emitted after each successful ETH balance split\\n     *  @param split Address of the split that distributed its balance\\n     *  @param amount Amount of ETH distributed\\n     *  @param distributorAddress Address to credit distributor fee to\\n     */\\n    event DistributeETH(address indexed split, uint256 amount, address indexed distributorAddress);\\n\\n    /** @notice emitted after each successful ERC20 balance split\\n     *  @param split Address of the split that distributed its balance\\n     *  @param token Address of ERC20 distributed\\n     *  @param amount Amount of ERC20 distributed\\n     *  @param distributorAddress Address to credit distributor fee to\\n     */\\n    event DistributeERC20(\\n        address indexed split,\\n        ERC20 indexed token,\\n        uint256 amount,\\n        address indexed distributorAddress\\n    );\\n\\n    /** @notice emitted after each successful withdrawal\\n     *  @param account Address that funds were withdrawn to\\n     *  @param ethAmount Amount of ETH withdrawn\\n     *  @param tokens Addresses of ERC20s withdrawn\\n     *  @param tokenAmounts Amounts of corresponding ERC20s withdrawn\\n     */\\n    event Withdrawal(address indexed account, uint256 ethAmount, ERC20[] tokens, uint256[] tokenAmounts);\\n}\\n\",\"keccak256\":\"0xcf2e72575544c2d95a855846782b7eb66ca0315472a1e11f9bb9da664dcecf90\",\"license\":\"GPL-3.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "events": {
              "CancelControlTransfer(address)": {
                "notice": "emitted after each canceled split control transfer"
              },
              "ControlTransfer(address,address,address)": {
                "notice": "emitted after each successful split control transfer"
              },
              "CreateSplit(address)": {
                "notice": "emitted after each successful split creation"
              },
              "DistributeERC20(address,address,uint256,address)": {
                "notice": "emitted after each successful ERC20 balance split"
              },
              "DistributeETH(address,uint256,address)": {
                "notice": "emitted after each successful ETH balance split"
              },
              "InitiateControlTransfer(address,address)": {
                "notice": "emitted after each initiated split control transfer"
              },
              "UpdateSplit(address)": {
                "notice": "emitted after each successful split update"
              },
              "Withdrawal(address,uint256,address[],uint256[])": {
                "notice": "emitted after each successful withdrawal"
              }
            },
            "kind": "user",
            "methods": {
              "walletImplementation()": {
                "notice": "FUNCTIONS"
              }
            },
            "version": 1
          }
        }
      },
      "contracts/splits/libraries/Clones.sol": {
        "Clones": {
          "abi": [],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c707b068d0795621b3b8bced147a5fb27e4cd2ca102d73c20483ce4501f2369164736f6c634300080e0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT 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 LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC7 SMOD 0xB0 PUSH9 0xD0795621B3B8BCED14 PUSH27 0x5FB27E4CD2CA102D73C20483CE4501F2369164736F6C634300080E STOP CALLER ",
              "sourceMap": "181:6590:5:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;181:6590:5;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c707b068d0795621b3b8bced147a5fb27e4cd2ca102d73c20483ce4501f2369164736f6c634300080e0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC7 SMOD 0xB0 PUSH9 0xD0795621B3B8BCED14 PUSH27 0x5FB27E4CD2CA102D73C20483CE4501F2369164736F6C634300080E STOP CALLER ",
              "sourceMap": "181:6590:5:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "103",
                "totalCost": "17303"
              },
              "internal": {
                "clone(address)": "infinite",
                "cloneDeterministic(address,bytes32)": "infinite",
                "predictDeterministicAddress(address,bytes32)": "infinite",
                "predictDeterministicAddress(address,bytes32,address)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.14+commit.80d49f37\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/splits/libraries/Clones.sol\":\"Clones\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/splits/libraries/Clones.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.4;\\n\\n/// @notice create opcode failed\\nerror CreateError();\\n/// @notice create2 opcode failed\\nerror Create2Error();\\n\\nlibrary Clones {\\n    /**\\n     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`\\n     * except when someone calls `receive()` and then it emits an event matching\\n     * `SplitWallet.ReceiveETH(indexed address, amount)`\\n     * Inspired by OZ & 0age's minimal clone implementations based on eip 1167 found at\\n     * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.0/contracts/proxy/Clones.sol\\n     * and https://medium.com/coinmonks/the-more-minimal-proxy-5756ae08ee48\\n     *\\n     * This function uses the create2 opcode and a `salt` to deterministically deploy\\n     * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n     * the clones cannot be deployed twice at the same address.\\n     *\\n     * init: 0x3d605d80600a3d3981f3\\n     * 3d   returndatasize  0\\n     * 605d push1 0x5d      0x5d 0\\n     * 80   dup1            0x5d 0x5d 0\\n     * 600a push1 0x0a      0x0a 0x5d 0x5d 0\\n     * 3d   returndatasize  0 0x0a 0x5d 0x5d 0\\n     * 39   codecopy        0x5d 0                      destOffset offset length     memory[destOffset:destOffset+length] = address(this).code[offset:offset+length]       copy executing contracts bytecode\\n     * 81   dup2            0 0x5d 0\\n     * f3   return          0                           offset length                return memory[offset:offset+length]                                                   returns from this contract call\\n     *\\n     * contract: 0x36603057343d52307f830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b160203da23d3df35b3d3d3d3d363d3d37363d73bebebebebebebebebebebebebebebebebebebebe5af43d3d93803e605b57fd5bf3\\n     *     0x000     36       calldatasize      cds\\n     *     0x001     6030     push1 0x30        0x30 cds\\n     * ,=< 0x003     57       jumpi\\n     * |   0x004     34       callvalue         cv\\n     * |   0x005     3d       returndatasize    0 cv\\n     * |   0x006     52       mstore\\n     * |   0x007     30       address           addr\\n     * |   0x008     7f830d.. push32 0x830d..   id addr\\n     * |   0x029     6020     push1 0x20        0x20 id addr\\n     * |   0x02b     3d       returndatasize    0 0x20 id addr\\n     * |   0x02c     a2       log2\\n     * |   0x02d     3d       returndatasize    0\\n     * |   0x02e     3d       returndatasize    0 0\\n     * |   0x02f     f3       return\\n     * `-> 0x030     5b       jumpdest\\n     *     0x031     3d       returndatasize    0\\n     *     0x032     3d       returndatasize    0 0\\n     *     0x033     3d       returndatasize    0 0 0\\n     *     0x034     3d       returndatasize    0 0 0 0\\n     *     0x035     36       calldatasize      cds 0 0 0 0\\n     *     0x036     3d       returndatasize    0 cds 0 0 0 0\\n     *     0x037     3d       returndatasize    0 0 cds 0 0 0 0\\n     *     0x038     37       calldatacopy      0 0 0 0\\n     *     0x039     36       calldatasize      cds 0 0 0 0\\n     *     0x03a     3d       returndatasize    0 cds 0 0 0 0\\n     *     0x03b     73bebe.. push20 0xbebe..   0xbebe 0 cds 0 0 0 0\\n     *     0x050     5a       gas               gas 0xbebe 0 cds 0 0 0 0\\n     *     0x051     f4       delegatecall      suc 0 0\\n     *     0x052     3d       returndatasize    rds suc 0 0\\n     *     0x053     3d       returndatasize    rds rds suc 0 0\\n     *     0x054     93       swap4             0 rds suc 0 rds\\n     *     0x055     80       dup1              0 0 rds suc 0 rds\\n     *     0x056     3e       returndatacopy    suc 0 rds\\n     *     0x057     605b     push1 0x5b        0x5b suc 0 rds\\n     * ,=< 0x059     57       jumpi             0 rds\\n     * |   0x05a     fd       revert\\n     * `-> 0x05b     5b       jumpdest          0 rds\\n     *     0x05c     f3       return\\n     *\\n     */\\n    function clone(address implementation) internal returns (address instance) {\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, 0x3d605d80600a3d3981f336603057343d52307f00000000000000000000000000)\\n            mstore(add(ptr, 0x13), 0x830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b1)\\n            mstore(add(ptr, 0x33), 0x60203da23d3df35b3d3d3d3d363d3d37363d7300000000000000000000000000)\\n            mstore(add(ptr, 0x46), shl(0x60, implementation))\\n            mstore(add(ptr, 0x5a), 0x5af43d3d93803e605b57fd5bf300000000000000000000000000000000000000)\\n            instance := create(0, ptr, 0x67)\\n        }\\n        if (instance == address(0)) revert CreateError();\\n    }\\n\\n    function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, 0x3d605d80600a3d3981f336603057343d52307f00000000000000000000000000)\\n            mstore(add(ptr, 0x13), 0x830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b1)\\n            mstore(add(ptr, 0x33), 0x60203da23d3df35b3d3d3d3d363d3d37363d7300000000000000000000000000)\\n            mstore(add(ptr, 0x46), shl(0x60, implementation))\\n            mstore(add(ptr, 0x5a), 0x5af43d3d93803e605b57fd5bf300000000000000000000000000000000000000)\\n            instance := create2(0, ptr, 0x67, salt)\\n        }\\n        if (instance == address(0)) revert Create2Error();\\n    }\\n\\n    /**\\n     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n     */\\n    function predictDeterministicAddress(\\n        address implementation,\\n        bytes32 salt,\\n        address deployer\\n    ) internal pure returns (address predicted) {\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, 0x3d605d80600a3d3981f336603057343d52307f00000000000000000000000000)\\n            mstore(add(ptr, 0x13), 0x830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b1)\\n            mstore(add(ptr, 0x33), 0x60203da23d3df35b3d3d3d3d363d3d37363d7300000000000000000000000000)\\n            mstore(add(ptr, 0x46), shl(0x60, implementation))\\n            mstore(add(ptr, 0x5a), 0x5af43d3d93803e605b57fd5bf3ff000000000000000000000000000000000000)\\n            mstore(add(ptr, 0x68), shl(0x60, deployer))\\n            mstore(add(ptr, 0x7c), salt)\\n            mstore(add(ptr, 0x9c), keccak256(ptr, 0x67))\\n            predicted := keccak256(add(ptr, 0x67), 0x55)\\n        }\\n    }\\n\\n    /**\\n     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n     */\\n    function predictDeterministicAddress(address implementation, bytes32 salt)\\n        internal\\n        view\\n        returns (address predicted)\\n    {\\n        return predictDeterministicAddress(implementation, salt, address(this));\\n    }\\n}\\n\",\"keccak256\":\"0x4f3585e1081f4cc05862a775bcfc48aae12980d3bb47ced376f09c1d21e0ebe2\",\"license\":\"GPL-3.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      }
    },
    "sources": {
      "@rari-capital/solmate/src/tokens/ERC20.sol": {
        "ast": {
          "absolutePath": "@rari-capital/solmate/src/tokens/ERC20.sol",
          "exportedSymbols": {
            "ERC20": [
              387
            ]
          },
          "id": 388,
          "license": "AGPL-3.0-only",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "42:24:0"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "canonicalName": "ERC20",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 2,
                "nodeType": "StructuredDocumentation",
                "src": "68:403:0",
                "text": "@notice Modern and gas efficient ERC20 + EIP-2612 implementation.\n @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)\n @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)\n @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it."
              },
              "fullyImplemented": true,
              "id": 387,
              "linearizedBaseContracts": [
                387
              ],
              "name": "ERC20",
              "nameLocation": "489:5:0",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "eventSelector": "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
                  "id": 10,
                  "name": "Transfer",
                  "nameLocation": "686:8:0",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 9,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "711:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 10,
                        "src": "695:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "695:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "733:2:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 10,
                        "src": "717:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "717:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "745:6:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 10,
                        "src": "737:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "737:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "694:58:0"
                  },
                  "src": "680:73:0"
                },
                {
                  "anonymous": false,
                  "eventSelector": "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
                  "id": 18,
                  "name": "Approval",
                  "nameLocation": "765:8:0",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 17,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "790:5:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 18,
                        "src": "774:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "774:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 14,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "813:7:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 18,
                        "src": "797:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "797:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 16,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "830:6:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 18,
                        "src": "822:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 15,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "822:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "773:64:0"
                  },
                  "src": "759:79:0"
                },
                {
                  "constant": false,
                  "functionSelector": "06fdde03",
                  "id": 20,
                  "mutability": "mutable",
                  "name": "name",
                  "nameLocation": "1042:4:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 387,
                  "src": "1028:18:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 19,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1028:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "95d89b41",
                  "id": 22,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nameLocation": "1067:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 387,
                  "src": "1053:20:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 21,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1053:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "313ce567",
                  "id": 24,
                  "mutability": "immutable",
                  "name": "decimals",
                  "nameLocation": "1103:8:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 387,
                  "src": "1080:31:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 23,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1080:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "18160ddd",
                  "id": 26,
                  "mutability": "mutable",
                  "name": "totalSupply",
                  "nameLocation": "1316:11:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 387,
                  "src": "1301:26:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1301:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "70a08231",
                  "id": 30,
                  "mutability": "mutable",
                  "name": "balanceOf",
                  "nameLocation": "1369:9:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 387,
                  "src": "1334:44:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 29,
                    "keyType": {
                      "id": 27,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1342:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1334:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 28,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1353:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "dd62ed3e",
                  "id": 36,
                  "mutability": "mutable",
                  "name": "allowance",
                  "nameLocation": "1440:9:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 387,
                  "src": "1385:64:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 35,
                    "keyType": {
                      "id": 31,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1393:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1385:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 34,
                      "keyType": {
                        "id": 32,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1412:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "1404:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 33,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1423:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "id": 38,
                  "mutability": "immutable",
                  "name": "INITIAL_CHAIN_ID",
                  "nameLocation": "1667:16:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 387,
                  "src": "1640:43:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 37,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1640:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 40,
                  "mutability": "immutable",
                  "name": "INITIAL_DOMAIN_SEPARATOR",
                  "nameLocation": "1717:24:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 387,
                  "src": "1690:51:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 39,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1690:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "functionSelector": "7ecebe00",
                  "id": 44,
                  "mutability": "mutable",
                  "name": "nonces",
                  "nameLocation": "1783:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 387,
                  "src": "1748:41:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 43,
                    "keyType": {
                      "id": 41,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1756:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1748:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 42,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1767:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 75,
                    "nodeType": "Block",
                    "src": "2081:189:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 55,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 53,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20,
                            "src": "2091:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 54,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 46,
                            "src": "2098:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "2091:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 56,
                        "nodeType": "ExpressionStatement",
                        "src": "2091:12:0"
                      },
                      {
                        "expression": {
                          "id": 59,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 57,
                            "name": "symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22,
                            "src": "2113:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 58,
                            "name": "_symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 48,
                            "src": "2122:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "2113:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 60,
                        "nodeType": "ExpressionStatement",
                        "src": "2113:16:0"
                      },
                      {
                        "expression": {
                          "id": 63,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 61,
                            "name": "decimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24,
                            "src": "2139:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 62,
                            "name": "_decimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50,
                            "src": "2150:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "2139:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 64,
                        "nodeType": "ExpressionStatement",
                        "src": "2139:20:0"
                      },
                      {
                        "expression": {
                          "id": 68,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 65,
                            "name": "INITIAL_CHAIN_ID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38,
                            "src": "2170:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 66,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "2189:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 67,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "chainid",
                            "nodeType": "MemberAccess",
                            "src": "2189:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2170:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 69,
                        "nodeType": "ExpressionStatement",
                        "src": "2170:32:0"
                      },
                      {
                        "expression": {
                          "id": 73,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 70,
                            "name": "INITIAL_DOMAIN_SEPARATOR",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 40,
                            "src": "2212:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 71,
                              "name": "computeDomainSeparator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 330,
                              "src": "2239:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                                "typeString": "function () view returns (bytes32)"
                              }
                            },
                            "id": 72,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2239:24:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2212:51:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 74,
                        "nodeType": "ExpressionStatement",
                        "src": "2212:51:0"
                      }
                    ]
                  },
                  "id": 76,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 51,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 46,
                        "mutability": "mutable",
                        "name": "_name",
                        "nameLocation": "2013:5:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 76,
                        "src": "1999:19:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 45,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1999:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 48,
                        "mutability": "mutable",
                        "name": "_symbol",
                        "nameLocation": "2042:7:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 76,
                        "src": "2028:21:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 47,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2028:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 50,
                        "mutability": "mutable",
                        "name": "_decimals",
                        "nameLocation": "2065:9:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 76,
                        "src": "2059:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 49,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "2059:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1989:91:0"
                  },
                  "returnParameters": {
                    "id": 52,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2081:0:0"
                  },
                  "scope": 387,
                  "src": "1978:292:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 103,
                    "nodeType": "Block",
                    "src": "2538:131:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 92,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 85,
                                "name": "allowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 36,
                                "src": "2548:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 89,
                              "indexExpression": {
                                "expression": {
                                  "id": 86,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "2558:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 87,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "2558:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2548:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 90,
                            "indexExpression": {
                              "id": 88,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 78,
                              "src": "2570:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2548:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 91,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 80,
                            "src": "2581:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2548:39:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 93,
                        "nodeType": "ExpressionStatement",
                        "src": "2548:39:0"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 95,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "2612:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 96,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "2612:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 97,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 78,
                              "src": "2624:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 98,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 80,
                              "src": "2633:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 94,
                            "name": "Approval",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18,
                            "src": "2603:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 99,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2603:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 100,
                        "nodeType": "EmitStatement",
                        "src": "2598:42:0"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 101,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2658:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 84,
                        "id": 102,
                        "nodeType": "Return",
                        "src": "2651:11:0"
                      }
                    ]
                  },
                  "functionSelector": "095ea7b3",
                  "id": 104,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nameLocation": "2467:7:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 81,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 78,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "2483:7:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 104,
                        "src": "2475:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 77,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2475:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 80,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "2500:6:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 104,
                        "src": "2492:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 79,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2492:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2474:33:0"
                  },
                  "returnParameters": {
                    "id": 84,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 83,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 104,
                        "src": "2532:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 82,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2532:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2531:6:0"
                  },
                  "scope": 387,
                  "src": "2458:211:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 136,
                    "nodeType": "Block",
                    "src": "2751:297:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 113,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30,
                              "src": "2761:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 116,
                            "indexExpression": {
                              "expression": {
                                "id": 114,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "2771:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 115,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "2771:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2761:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "id": 117,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 108,
                            "src": "2786:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2761:31:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 119,
                        "nodeType": "ExpressionStatement",
                        "src": "2761:31:0"
                      },
                      {
                        "id": 126,
                        "nodeType": "UncheckedBlock",
                        "src": "2914:58:0",
                        "statements": [
                          {
                            "expression": {
                              "id": 124,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "baseExpression": {
                                  "id": 120,
                                  "name": "balanceOf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 30,
                                  "src": "2938:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 122,
                                "indexExpression": {
                                  "id": 121,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 106,
                                  "src": "2948:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "2938:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "id": 123,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 108,
                                "src": "2955:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2938:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 125,
                            "nodeType": "ExpressionStatement",
                            "src": "2938:23:0"
                          }
                        ]
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 128,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "2996:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 129,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "2996:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 130,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 106,
                              "src": "3008:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 131,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 108,
                              "src": "3012:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 127,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10,
                            "src": "2987:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2987:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 133,
                        "nodeType": "EmitStatement",
                        "src": "2982:37:0"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 134,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3037:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 112,
                        "id": 135,
                        "nodeType": "Return",
                        "src": "3030:11:0"
                      }
                    ]
                  },
                  "functionSelector": "a9059cbb",
                  "id": 137,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nameLocation": "2684:8:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 109,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 106,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "2701:2:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 137,
                        "src": "2693:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 105,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2693:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 108,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "2713:6:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 137,
                        "src": "2705:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 107,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2705:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2692:28:0"
                  },
                  "returnParameters": {
                    "id": 112,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 111,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 137,
                        "src": "2745:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 110,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2745:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2744:6:0"
                  },
                  "scope": 387,
                  "src": "2675:373:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 197,
                    "nodeType": "Block",
                    "src": "3178:468:0",
                    "statements": [
                      {
                        "assignments": [
                          149
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 149,
                            "mutability": "mutable",
                            "name": "allowed",
                            "nameLocation": "3196:7:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 197,
                            "src": "3188:15:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 148,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3188:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 156,
                        "initialValue": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 150,
                              "name": "allowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 36,
                              "src": "3206:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 152,
                            "indexExpression": {
                              "id": 151,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 139,
                              "src": "3216:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3206:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 155,
                          "indexExpression": {
                            "expression": {
                              "id": 153,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "3222:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 154,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "3222:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3206:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3188:45:0"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 163,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 157,
                            "name": "allowed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 149,
                            "src": "3284:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 160,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3300:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 159,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3300:7:0",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  }
                                ],
                                "id": 158,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "3295:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 161,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3295:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint256",
                                "typeString": "type(uint256)"
                              }
                            },
                            "id": 162,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "3295:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3284:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 175,
                        "nodeType": "IfStatement",
                        "src": "3280:80:0",
                        "trueBody": {
                          "expression": {
                            "id": 173,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "baseExpression": {
                                "baseExpression": {
                                  "id": 164,
                                  "name": "allowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 36,
                                  "src": "3314:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                    "typeString": "mapping(address => mapping(address => uint256))"
                                  }
                                },
                                "id": 168,
                                "indexExpression": {
                                  "id": 165,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 139,
                                  "src": "3324:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3314:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 169,
                              "indexExpression": {
                                "expression": {
                                  "id": 166,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "3330:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 167,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "3330:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "3314:27:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 172,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 170,
                                "name": "allowed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 149,
                                "src": "3344:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "id": 171,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 143,
                                "src": "3354:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3344:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3314:46:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 174,
                          "nodeType": "ExpressionStatement",
                          "src": "3314:46:0"
                        }
                      },
                      {
                        "expression": {
                          "id": 180,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 176,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30,
                              "src": "3371:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 178,
                            "indexExpression": {
                              "id": 177,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 139,
                              "src": "3381:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3371:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "id": 179,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 143,
                            "src": "3390:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3371:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 181,
                        "nodeType": "ExpressionStatement",
                        "src": "3371:25:0"
                      },
                      {
                        "id": 188,
                        "nodeType": "UncheckedBlock",
                        "src": "3518:58:0",
                        "statements": [
                          {
                            "expression": {
                              "id": 186,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "baseExpression": {
                                  "id": 182,
                                  "name": "balanceOf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 30,
                                  "src": "3542:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 184,
                                "indexExpression": {
                                  "id": 183,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 141,
                                  "src": "3552:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "3542:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "id": 185,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 143,
                                "src": "3559:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3542:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 187,
                            "nodeType": "ExpressionStatement",
                            "src": "3542:23:0"
                          }
                        ]
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 190,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 139,
                              "src": "3600:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 191,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 141,
                              "src": "3606:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 192,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 143,
                              "src": "3610:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 189,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10,
                            "src": "3591:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3591:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 194,
                        "nodeType": "EmitStatement",
                        "src": "3586:31:0"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 195,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3635:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 147,
                        "id": 196,
                        "nodeType": "Return",
                        "src": "3628:11:0"
                      }
                    ]
                  },
                  "functionSelector": "23b872dd",
                  "id": 198,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nameLocation": "3063:12:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 144,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 139,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "3093:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 198,
                        "src": "3085:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 138,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3085:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 141,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "3115:2:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 198,
                        "src": "3107:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 140,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3107:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 143,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "3135:6:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 198,
                        "src": "3127:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 142,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3127:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3075:72:0"
                  },
                  "returnParameters": {
                    "id": 147,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 146,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 198,
                        "src": "3172:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 145,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3172:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3171:6:0"
                  },
                  "scope": 387,
                  "src": "3054:592:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 284,
                    "nodeType": "Block",
                    "src": "4024:1294:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 219,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 216,
                                "name": "deadline",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 206,
                                "src": "4042:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "expression": {
                                  "id": 217,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "4054:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 218,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "4054:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4042:27:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5045524d49545f444541444c494e455f45585049524544",
                              "id": 220,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4071:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_dd18cfd81b4c1281b56302a044e7f751a261543590362c41d86af048f8ed4b3e",
                                "typeString": "literal_string \"PERMIT_DEADLINE_EXPIRED\""
                              },
                              "value": "PERMIT_DEADLINE_EXPIRED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_dd18cfd81b4c1281b56302a044e7f751a261543590362c41d86af048f8ed4b3e",
                                "typeString": "literal_string \"PERMIT_DEADLINE_EXPIRED\""
                              }
                            ],
                            "id": 215,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4034:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 221,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4034:63:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 222,
                        "nodeType": "ExpressionStatement",
                        "src": "4034:63:0"
                      },
                      {
                        "id": 277,
                        "nodeType": "UncheckedBlock",
                        "src": "4238:1027:0",
                        "statements": [
                          {
                            "assignments": [
                              224
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 224,
                                "mutability": "mutable",
                                "name": "recoveredAddress",
                                "nameLocation": "4270:16:0",
                                "nodeType": "VariableDeclaration",
                                "scope": 277,
                                "src": "4262:24:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "typeName": {
                                  "id": 223,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4262:7:0",
                                  "stateMutability": "nonpayable",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 254,
                            "initialValue": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "hexValue": "1901",
                                          "id": 229,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "string",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "4389:10:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                                            "typeString": "literal_string hex\"1901\""
                                          },
                                          "value": "\u0019\u0001"
                                        },
                                        {
                                          "arguments": [],
                                          "expression": {
                                            "argumentTypes": [],
                                            "id": 230,
                                            "name": "DOMAIN_SEPARATOR",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 300,
                                            "src": "4425:16:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                                              "typeString": "function () view returns (bytes32)"
                                            }
                                          },
                                          "id": 231,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "4425:18:0",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "hexValue": "5065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529",
                                                      "id": 236,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "kind": "string",
                                                      "lValueRequested": false,
                                                      "nodeType": "Literal",
                                                      "src": "4599:84:0",
                                                      "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": 235,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -8,
                                                    "src": "4552:9:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                  },
                                                  "id": 237,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "functionCall",
                                                  "lValueRequested": false,
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "4552:165:0",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                  }
                                                },
                                                {
                                                  "id": 238,
                                                  "name": "owner",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 200,
                                                  "src": "4751:5:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                },
                                                {
                                                  "id": 239,
                                                  "name": "spender",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 202,
                                                  "src": "4790:7:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                },
                                                {
                                                  "id": 240,
                                                  "name": "value",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 204,
                                                  "src": "4831:5:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                {
                                                  "id": 244,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "nodeType": "UnaryOperation",
                                                  "operator": "++",
                                                  "prefix": false,
                                                  "src": "4870:15:0",
                                                  "subExpression": {
                                                    "baseExpression": {
                                                      "id": 241,
                                                      "name": "nonces",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 44,
                                                      "src": "4870:6:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                        "typeString": "mapping(address => uint256)"
                                                      }
                                                    },
                                                    "id": 243,
                                                    "indexExpression": {
                                                      "id": 242,
                                                      "name": "owner",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 200,
                                                      "src": "4877:5:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                      }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "IndexAccess",
                                                    "src": "4870:13:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                {
                                                  "id": 245,
                                                  "name": "deadline",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 206,
                                                  "src": "4919:8:0",
                                                  "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": 233,
                                                  "name": "abi",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": -1,
                                                  "src": "4508:3:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                  }
                                                },
                                                "id": 234,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "encode",
                                                "nodeType": "MemberAccess",
                                                "src": "4508:10:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                                  "typeString": "function () pure returns (bytes memory)"
                                                }
                                              },
                                              "id": 246,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "4508:449:0",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            ],
                                            "id": 232,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -8,
                                            "src": "4469:9:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                              "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                          },
                                          "id": 247,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "4469:514:0",
                                          "tryCall": false,
                                          "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": 227,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -1,
                                          "src": "4347:3:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 228,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberName": "encodePacked",
                                        "nodeType": "MemberAccess",
                                        "src": "4347:16:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                          "typeString": "function () pure returns (bytes memory)"
                                        }
                                      },
                                      "id": 248,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4347:658:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "id": 226,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -8,
                                    "src": "4316:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 249,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4316:707:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 250,
                                  "name": "v",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 208,
                                  "src": "5041:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "id": 251,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 210,
                                  "src": "5060:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 252,
                                  "name": "s",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 212,
                                  "src": "5079:1:0",
                                  "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": 225,
                                "name": "ecrecover",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -6,
                                "src": "4289:9:0",
                                "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": 253,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4289:805:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "4262:832:0"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 265,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    "id": 261,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 256,
                                      "name": "recoveredAddress",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 224,
                                      "src": "5117:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "!=",
                                    "rightExpression": {
                                      "arguments": [
                                        {
                                          "hexValue": "30",
                                          "id": 259,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "5145:1:0",
                                          "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": 258,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "5137:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 257,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "5137:7:0",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 260,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5137:10:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "src": "5117:30:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&&",
                                  "rightExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    "id": 264,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 262,
                                      "name": "recoveredAddress",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 224,
                                      "src": "5151:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "id": 263,
                                      "name": "owner",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 200,
                                      "src": "5171:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "src": "5151:25:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "5117:59:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "hexValue": "494e56414c49445f5349474e4552",
                                  "id": 266,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5178:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_ba2319f5fa9f0c8e55f0d6899910b7354e6f643d1d349de47190066d85e68a1c",
                                    "typeString": "literal_string \"INVALID_SIGNER\""
                                  },
                                  "value": "INVALID_SIGNER"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_ba2319f5fa9f0c8e55f0d6899910b7354e6f643d1d349de47190066d85e68a1c",
                                    "typeString": "literal_string \"INVALID_SIGNER\""
                                  }
                                ],
                                "id": 255,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -18,
                                  -18
                                ],
                                "referencedDeclaration": -18,
                                "src": "5109:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 267,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5109:86:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 268,
                            "nodeType": "ExpressionStatement",
                            "src": "5109:86:0"
                          },
                          {
                            "expression": {
                              "id": 275,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 269,
                                    "name": "allowance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 36,
                                    "src": "5210:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                      "typeString": "mapping(address => mapping(address => uint256))"
                                    }
                                  },
                                  "id": 272,
                                  "indexExpression": {
                                    "id": 270,
                                    "name": "recoveredAddress",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 224,
                                    "src": "5220:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5210:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 273,
                                "indexExpression": {
                                  "id": 271,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 202,
                                  "src": "5238:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "5210:36:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "id": 274,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 204,
                                "src": "5249:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5210:44:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 276,
                            "nodeType": "ExpressionStatement",
                            "src": "5210:44:0"
                          }
                        ]
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 279,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 200,
                              "src": "5289:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 280,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 202,
                              "src": "5296:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 281,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 204,
                              "src": "5305:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 278,
                            "name": "Approval",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18,
                            "src": "5280:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 282,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5280:31:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 283,
                        "nodeType": "EmitStatement",
                        "src": "5275:36:0"
                      }
                    ]
                  },
                  "functionSelector": "d505accf",
                  "id": 285,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "permit",
                  "nameLocation": "3844:6:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 213,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 200,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "3868:5:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 285,
                        "src": "3860:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 199,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3860:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 202,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "3891:7:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 285,
                        "src": "3883:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 201,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3883:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 204,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "3916:5:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 285,
                        "src": "3908:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 203,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3908:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 206,
                        "mutability": "mutable",
                        "name": "deadline",
                        "nameLocation": "3939:8:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 285,
                        "src": "3931:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 205,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3931:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 208,
                        "mutability": "mutable",
                        "name": "v",
                        "nameLocation": "3963:1:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 285,
                        "src": "3957:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 207,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "3957:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 210,
                        "mutability": "mutable",
                        "name": "r",
                        "nameLocation": "3982:1:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 285,
                        "src": "3974:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 209,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3974:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 212,
                        "mutability": "mutable",
                        "name": "s",
                        "nameLocation": "4001:1:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 285,
                        "src": "3993:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 211,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3993:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3850:158:0"
                  },
                  "returnParameters": {
                    "id": 214,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4024:0:0"
                  },
                  "scope": 387,
                  "src": "3835:1483:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 299,
                    "nodeType": "Block",
                    "src": "5390:111:0",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 293,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 290,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "5407:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 291,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "chainid",
                              "nodeType": "MemberAccess",
                              "src": "5407:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 292,
                              "name": "INITIAL_CHAIN_ID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 38,
                              "src": "5424:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "5407:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 295,
                              "name": "computeDomainSeparator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 330,
                              "src": "5470:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                                "typeString": "function () view returns (bytes32)"
                              }
                            },
                            "id": 296,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5470:24:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "5407:87:0",
                          "trueExpression": {
                            "id": 294,
                            "name": "INITIAL_DOMAIN_SEPARATOR",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 40,
                            "src": "5443:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 289,
                        "id": 298,
                        "nodeType": "Return",
                        "src": "5400:94:0"
                      }
                    ]
                  },
                  "functionSelector": "3644e515",
                  "id": 300,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "DOMAIN_SEPARATOR",
                  "nameLocation": "5333:16:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 286,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5349:2:0"
                  },
                  "returnParameters": {
                    "id": 289,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 288,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 300,
                        "src": "5381:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 287,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5381:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5380:9:0"
                  },
                  "scope": 387,
                  "src": "5324:177:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 329,
                    "nodeType": "Block",
                    "src": "5581:372:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429",
                                      "id": 309,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "string",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "5679:84:0",
                                      "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": 308,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -8,
                                    "src": "5669:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 310,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5669:95:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "id": 314,
                                          "name": "name",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 20,
                                          "src": "5802:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage",
                                            "typeString": "string storage ref"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_string_storage",
                                            "typeString": "string storage ref"
                                          }
                                        ],
                                        "id": 313,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "5796:5:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                          "typeString": "type(bytes storage pointer)"
                                        },
                                        "typeName": {
                                          "id": 312,
                                          "name": "bytes",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "5796:5:0",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 315,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5796:11:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes storage pointer"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes storage pointer"
                                      }
                                    ],
                                    "id": 311,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -8,
                                    "src": "5786:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 316,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5786:22:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "hexValue": "31",
                                      "id": 318,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "string",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "5840:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6",
                                        "typeString": "literal_string \"1\""
                                      },
                                      "value": "1"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6",
                                        "typeString": "literal_string \"1\""
                                      }
                                    ],
                                    "id": 317,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -8,
                                    "src": "5830:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 319,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5830:14:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 320,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "5866:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 321,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "chainid",
                                  "nodeType": "MemberAccess",
                                  "src": "5866:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 324,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "5909:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ERC20_$387",
                                        "typeString": "contract ERC20"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_ERC20_$387",
                                        "typeString": "contract ERC20"
                                      }
                                    ],
                                    "id": 323,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "5901:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 322,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5901:7:0",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 325,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5901:13:0",
                                  "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": 306,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "5637:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 307,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "5637:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 326,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5637:295:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 305,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "5610:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 327,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5610:336:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 304,
                        "id": 328,
                        "nodeType": "Return",
                        "src": "5591:355:0"
                      }
                    ]
                  },
                  "id": 330,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "computeDomainSeparator",
                  "nameLocation": "5516:22:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 301,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5538:2:0"
                  },
                  "returnParameters": {
                    "id": 304,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 303,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 330,
                        "src": "5572:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 302,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5572:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5571:9:0"
                  },
                  "scope": 387,
                  "src": "5507:446:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 357,
                    "nodeType": "Block",
                    "src": "6207:265:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 337,
                            "name": "totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26,
                            "src": "6217:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 338,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 334,
                            "src": "6232:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6217:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 340,
                        "nodeType": "ExpressionStatement",
                        "src": "6217:21:0"
                      },
                      {
                        "id": 347,
                        "nodeType": "UncheckedBlock",
                        "src": "6360:58:0",
                        "statements": [
                          {
                            "expression": {
                              "id": 345,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "baseExpression": {
                                  "id": 341,
                                  "name": "balanceOf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 30,
                                  "src": "6384:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 343,
                                "indexExpression": {
                                  "id": 342,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 332,
                                  "src": "6394:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "6384:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "id": 344,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 334,
                                "src": "6401:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6384:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 346,
                            "nodeType": "ExpressionStatement",
                            "src": "6384:23:0"
                          }
                        ]
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 351,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6450:1:0",
                                  "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": 350,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6442:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 349,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6442:7:0",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 352,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6442:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 353,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 332,
                              "src": "6454:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 354,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 334,
                              "src": "6458:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 348,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10,
                            "src": "6433:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 355,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6433:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 356,
                        "nodeType": "EmitStatement",
                        "src": "6428:37:0"
                      }
                    ]
                  },
                  "id": 358,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nameLocation": "6156:5:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 335,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 332,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "6170:2:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 358,
                        "src": "6162:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 331,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6162:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 334,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "6182:6:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 358,
                        "src": "6174:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 333,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6174:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6161:28:0"
                  },
                  "returnParameters": {
                    "id": 336,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6207:0:0"
                  },
                  "scope": 387,
                  "src": "6147:325:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 385,
                    "nodeType": "Block",
                    "src": "6540:266:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 365,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30,
                              "src": "6550:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 367,
                            "indexExpression": {
                              "id": 366,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 360,
                              "src": "6560:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6550:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "id": 368,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 362,
                            "src": "6569:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6550:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 370,
                        "nodeType": "ExpressionStatement",
                        "src": "6550:25:0"
                      },
                      {
                        "id": 375,
                        "nodeType": "UncheckedBlock",
                        "src": "6694:56:0",
                        "statements": [
                          {
                            "expression": {
                              "id": 373,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 371,
                                "name": "totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 26,
                                "src": "6718:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "-=",
                              "rightHandSide": {
                                "id": 372,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 362,
                                "src": "6733:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6718:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 374,
                            "nodeType": "ExpressionStatement",
                            "src": "6718:21:0"
                          }
                        ]
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 377,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 360,
                              "src": "6774:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 380,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6788:1:0",
                                  "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": 379,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6780:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 378,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6780:7:0",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 381,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6780:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 382,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 362,
                              "src": "6792:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 376,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10,
                            "src": "6765:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6765:34:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 384,
                        "nodeType": "EmitStatement",
                        "src": "6760:39:0"
                      }
                    ]
                  },
                  "id": 386,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nameLocation": "6487:5:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 363,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 360,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "6501:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 386,
                        "src": "6493:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 359,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6493:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 362,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "6515:6:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 386,
                        "src": "6507:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 361,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6507:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6492:30:0"
                  },
                  "returnParameters": {
                    "id": 364,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6540:0:0"
                  },
                  "scope": 387,
                  "src": "6478:328:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 388,
              "src": "471:6337:0",
              "usedErrors": []
            }
          ],
          "src": "42:6767:0"
        },
        "id": 0
      },
      "@rari-capital/solmate/src/utils/SafeTransferLib.sol": {
        "ast": {
          "absolutePath": "@rari-capital/solmate/src/utils/SafeTransferLib.sol",
          "exportedSymbols": {
            "ERC20": [
              387
            ],
            "SafeTransferLib": [
              472
            ]
          },
          "id": 473,
          "license": "AGPL-3.0-only",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 389,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "42:24:1"
            },
            {
              "absolutePath": "@rari-capital/solmate/src/tokens/ERC20.sol",
              "file": "../tokens/ERC20.sol",
              "id": 391,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 473,
              "sourceUnit": 388,
              "src": "68:42:1",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 390,
                    "name": "ERC20",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 387,
                    "src": "76:5:1",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "SafeTransferLib",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 392,
                "nodeType": "StructuredDocumentation",
                "src": "112:471:1",
                "text": "@notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.\n @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)\n @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.\n @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller."
              },
              "fullyImplemented": true,
              "id": 472,
              "linearizedBaseContracts": [
                472
              ],
              "name": "SafeTransferLib",
              "nameLocation": "591:15:1",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 408,
                    "nodeType": "Block",
                    "src": "858:234:1",
                    "statements": [
                      {
                        "assignments": [
                          400
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 400,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "873:7:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 408,
                            "src": "868:12:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 399,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "868:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 401,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "868:12:1"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "900:136:1",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "980:46:1",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "gas",
                                      "nodeType": "YulIdentifier",
                                      "src": "996:3:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "996:5:1"
                                  },
                                  {
                                    "name": "to",
                                    "nodeType": "YulIdentifier",
                                    "src": "1003:2:1"
                                  },
                                  {
                                    "name": "amount",
                                    "nodeType": "YulIdentifier",
                                    "src": "1007:6:1"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1015:1:1",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1018:1:1",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1021:1:1",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1024:1:1",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "call",
                                  "nodeType": "YulIdentifier",
                                  "src": "991:4:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "991:35:1"
                              },
                              "variableNames": [
                                {
                                  "name": "success",
                                  "nodeType": "YulIdentifier",
                                  "src": "980:7:1"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 396,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1007:6:1",
                            "valueSize": 1
                          },
                          {
                            "declaration": 400,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "980:7:1",
                            "valueSize": 1
                          },
                          {
                            "declaration": 394,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1003:2:1",
                            "valueSize": 1
                          }
                        ],
                        "id": 402,
                        "nodeType": "InlineAssembly",
                        "src": "891:145:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 404,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 400,
                              "src": "1054:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4554485f5452414e534645525f4641494c4544",
                              "id": 405,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1063:21:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_d383913ea1996930a2623a0d739b8fc033c734c1d71d4759d3ccba1d3a719c29",
                                "typeString": "literal_string \"ETH_TRANSFER_FAILED\""
                              },
                              "value": "ETH_TRANSFER_FAILED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_d383913ea1996930a2623a0d739b8fc033c734c1d71d4759d3ccba1d3a719c29",
                                "typeString": "literal_string \"ETH_TRANSFER_FAILED\""
                              }
                            ],
                            "id": 403,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1046:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1046:39:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 407,
                        "nodeType": "ExpressionStatement",
                        "src": "1046:39:1"
                      }
                    ]
                  },
                  "id": 409,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferETH",
                  "nameLocation": "805:15:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 397,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 394,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "829:2:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 409,
                        "src": "821:10:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 393,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "821:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 396,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "841:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 409,
                        "src": "833:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 395,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "833:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "820:28:1"
                  },
                  "returnParameters": {
                    "id": 398,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "858:0:1"
                  },
                  "scope": 472,
                  "src": "796:296:1",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 430,
                    "nodeType": "Block",
                    "src": "1410:1445:1",
                    "statements": [
                      {
                        "assignments": [
                          422
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 422,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "1425:7:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 430,
                            "src": "1420:12:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 421,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "1420:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 423,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1420:12:1"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "1452:1346:1",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1516:36:1",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1547:4:1",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1541:5:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1541:11:1"
                              },
                              "variables": [
                                {
                                  "name": "freeMemoryPointer",
                                  "nodeType": "YulTypedName",
                                  "src": "1520:17:1",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "freeMemoryPointer",
                                    "nodeType": "YulIdentifier",
                                    "src": "1670:17:1"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1689:66:1",
                                    "type": "",
                                    "value": "0x23b872dd00000000000000000000000000000000000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1663:6:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1663:93:1"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1663:93:1"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "freeMemoryPointer",
                                        "nodeType": "YulIdentifier",
                                        "src": "1780:17:1"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1799:1:1",
                                        "type": "",
                                        "value": "4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1776:3:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1776:25:1"
                                  },
                                  {
                                    "name": "from",
                                    "nodeType": "YulIdentifier",
                                    "src": "1803:4:1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1769:6:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1769:39:1"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1769:39:1"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "freeMemoryPointer",
                                        "nodeType": "YulIdentifier",
                                        "src": "1863:17:1"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1882:2:1",
                                        "type": "",
                                        "value": "36"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1859:3:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1859:26:1"
                                  },
                                  {
                                    "name": "to",
                                    "nodeType": "YulIdentifier",
                                    "src": "1887:2:1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1852:6:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1852:38:1"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1852:38:1"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "freeMemoryPointer",
                                        "nodeType": "YulIdentifier",
                                        "src": "1943:17:1"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1962:2:1",
                                        "type": "",
                                        "value": "68"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1939:3:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1939:26:1"
                                  },
                                  {
                                    "name": "amount",
                                    "nodeType": "YulIdentifier",
                                    "src": "1967:6:1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1932:6:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1932:42:1"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1932:42:1"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2021:767:1",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "2248:1:1",
                                                    "type": "",
                                                    "value": "0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2242:5:1"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2242:8:1"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2252:1:1",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "eq",
                                              "nodeType": "YulIdentifier",
                                              "src": "2239:2:1"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2239:15:1"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [],
                                                "functionName": {
                                                  "name": "returndatasize",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2259:14:1"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2259:16:1"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2277:2:1",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "gt",
                                              "nodeType": "YulIdentifier",
                                              "src": "2256:2:1"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2256:24:1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2235:3:1"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2235:46:1"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [],
                                            "functionName": {
                                              "name": "returndatasize",
                                              "nodeType": "YulIdentifier",
                                              "src": "2290:14:1"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2290:16:1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "2283:6:1"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2283:24:1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "or",
                                      "nodeType": "YulIdentifier",
                                      "src": "2232:2:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2232:76:1"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [],
                                        "functionName": {
                                          "name": "gas",
                                          "nodeType": "YulIdentifier",
                                          "src": "2727:3:1"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2727:5:1"
                                      },
                                      {
                                        "name": "token",
                                        "nodeType": "YulIdentifier",
                                        "src": "2734:5:1"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2741:1:1",
                                        "type": "",
                                        "value": "0"
                                      },
                                      {
                                        "name": "freeMemoryPointer",
                                        "nodeType": "YulIdentifier",
                                        "src": "2744:17:1"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2763:3:1",
                                        "type": "",
                                        "value": "100"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2768:1:1",
                                        "type": "",
                                        "value": "0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2771:2:1",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "call",
                                      "nodeType": "YulIdentifier",
                                      "src": "2722:4:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2722:52:1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "2032:3:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2032:756:1"
                              },
                              "variableNames": [
                                {
                                  "name": "success",
                                  "nodeType": "YulIdentifier",
                                  "src": "2021:7:1"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 418,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1967:6:1",
                            "valueSize": 1
                          },
                          {
                            "declaration": 414,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1803:4:1",
                            "valueSize": 1
                          },
                          {
                            "declaration": 422,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2021:7:1",
                            "valueSize": 1
                          },
                          {
                            "declaration": 416,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1887:2:1",
                            "valueSize": 1
                          },
                          {
                            "declaration": 412,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2734:5:1",
                            "valueSize": 1
                          }
                        ],
                        "id": 424,
                        "nodeType": "InlineAssembly",
                        "src": "1443:1355:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 426,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 422,
                              "src": "2816:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5452414e534645525f46524f4d5f4641494c4544",
                              "id": 427,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2825:22:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_77631768048ee92f9dcf4b9b9d762877d6b9723214862c733f0596708fc219b7",
                                "typeString": "literal_string \"TRANSFER_FROM_FAILED\""
                              },
                              "value": "TRANSFER_FROM_FAILED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_77631768048ee92f9dcf4b9b9d762877d6b9723214862c733f0596708fc219b7",
                                "typeString": "literal_string \"TRANSFER_FROM_FAILED\""
                              }
                            ],
                            "id": 425,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2808:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 428,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2808:40:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 429,
                        "nodeType": "ExpressionStatement",
                        "src": "2808:40:1"
                      }
                    ]
                  },
                  "id": 431,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "1291:16:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 419,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 412,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "1323:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 431,
                        "src": "1317:11:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$387",
                          "typeString": "contract ERC20"
                        },
                        "typeName": {
                          "id": 411,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 410,
                            "name": "ERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 387,
                            "src": "1317:5:1"
                          },
                          "referencedDeclaration": 387,
                          "src": "1317:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$387",
                            "typeString": "contract ERC20"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 414,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "1346:4:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 431,
                        "src": "1338:12:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 413,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1338:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 416,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "1368:2:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 431,
                        "src": "1360:10:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 415,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1360:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 418,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "1388:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 431,
                        "src": "1380:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 417,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1380:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1307:93:1"
                  },
                  "returnParameters": {
                    "id": 420,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1410:0:1"
                  },
                  "scope": 472,
                  "src": "1282:1573:1",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 450,
                    "nodeType": "Block",
                    "src": "2963:1354:1",
                    "statements": [
                      {
                        "assignments": [
                          442
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 442,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "2978:7:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 450,
                            "src": "2973:12:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 441,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "2973:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 443,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2973:12:1"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "3005:1260:1",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3069:36:1",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3100:4:1",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3094:5:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3094:11:1"
                              },
                              "variables": [
                                {
                                  "name": "freeMemoryPointer",
                                  "nodeType": "YulTypedName",
                                  "src": "3073:17:1",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "freeMemoryPointer",
                                    "nodeType": "YulIdentifier",
                                    "src": "3223:17:1"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3242:66:1",
                                    "type": "",
                                    "value": "0xa9059cbb00000000000000000000000000000000000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3216:6:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3216:93:1"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3216:93:1"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "freeMemoryPointer",
                                        "nodeType": "YulIdentifier",
                                        "src": "3333:17:1"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3352:1:1",
                                        "type": "",
                                        "value": "4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3329:3:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3329:25:1"
                                  },
                                  {
                                    "name": "to",
                                    "nodeType": "YulIdentifier",
                                    "src": "3356:2:1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3322:6:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3322:37:1"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3322:37:1"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "freeMemoryPointer",
                                        "nodeType": "YulIdentifier",
                                        "src": "3412:17:1"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3431:2:1",
                                        "type": "",
                                        "value": "36"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3408:3:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3408:26:1"
                                  },
                                  {
                                    "name": "amount",
                                    "nodeType": "YulIdentifier",
                                    "src": "3436:6:1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3401:6:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3401:42:1"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3401:42:1"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3490:765:1",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "3717:1:1",
                                                    "type": "",
                                                    "value": "0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3711:5:1"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3711:8:1"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3721:1:1",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "eq",
                                              "nodeType": "YulIdentifier",
                                              "src": "3708:2:1"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3708:15:1"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [],
                                                "functionName": {
                                                  "name": "returndatasize",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3728:14:1"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3728:16:1"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3746:2:1",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "gt",
                                              "nodeType": "YulIdentifier",
                                              "src": "3725:2:1"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3725:24:1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "3704:3:1"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3704:46:1"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [],
                                            "functionName": {
                                              "name": "returndatasize",
                                              "nodeType": "YulIdentifier",
                                              "src": "3759:14:1"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3759:16:1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "3752:6:1"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3752:24:1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "or",
                                      "nodeType": "YulIdentifier",
                                      "src": "3701:2:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3701:76:1"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [],
                                        "functionName": {
                                          "name": "gas",
                                          "nodeType": "YulIdentifier",
                                          "src": "4195:3:1"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4195:5:1"
                                      },
                                      {
                                        "name": "token",
                                        "nodeType": "YulIdentifier",
                                        "src": "4202:5:1"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4209:1:1",
                                        "type": "",
                                        "value": "0"
                                      },
                                      {
                                        "name": "freeMemoryPointer",
                                        "nodeType": "YulIdentifier",
                                        "src": "4212:17:1"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4231:2:1",
                                        "type": "",
                                        "value": "68"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4235:1:1",
                                        "type": "",
                                        "value": "0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4238:2:1",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "call",
                                      "nodeType": "YulIdentifier",
                                      "src": "4190:4:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4190:51:1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "3501:3:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3501:754:1"
                              },
                              "variableNames": [
                                {
                                  "name": "success",
                                  "nodeType": "YulIdentifier",
                                  "src": "3490:7:1"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 438,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3436:6:1",
                            "valueSize": 1
                          },
                          {
                            "declaration": 442,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3490:7:1",
                            "valueSize": 1
                          },
                          {
                            "declaration": 436,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3356:2:1",
                            "valueSize": 1
                          },
                          {
                            "declaration": 434,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4202:5:1",
                            "valueSize": 1
                          }
                        ],
                        "id": 444,
                        "nodeType": "InlineAssembly",
                        "src": "2996:1269:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 446,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 442,
                              "src": "4283:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5452414e534645525f4641494c4544",
                              "id": 447,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4292:17:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8bf8f0d780f13740660fe63233b17f96cb1813889e7dce4121e55b817b367b72",
                                "typeString": "literal_string \"TRANSFER_FAILED\""
                              },
                              "value": "TRANSFER_FAILED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_8bf8f0d780f13740660fe63233b17f96cb1813889e7dce4121e55b817b367b72",
                                "typeString": "literal_string \"TRANSFER_FAILED\""
                              }
                            ],
                            "id": 445,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4275:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 448,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4275:35:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 449,
                        "nodeType": "ExpressionStatement",
                        "src": "4275:35:1"
                      }
                    ]
                  },
                  "id": 451,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransfer",
                  "nameLocation": "2870:12:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 439,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 434,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "2898:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 451,
                        "src": "2892:11:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$387",
                          "typeString": "contract ERC20"
                        },
                        "typeName": {
                          "id": 433,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 432,
                            "name": "ERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 387,
                            "src": "2892:5:1"
                          },
                          "referencedDeclaration": 387,
                          "src": "2892:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$387",
                            "typeString": "contract ERC20"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 436,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "2921:2:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 451,
                        "src": "2913:10:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 435,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2913:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 438,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "2941:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 451,
                        "src": "2933:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 437,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2933:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2882:71:1"
                  },
                  "returnParameters": {
                    "id": 440,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2963:0:1"
                  },
                  "scope": 472,
                  "src": "2861:1456:1",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 470,
                    "nodeType": "Block",
                    "src": "4424:1353:1",
                    "statements": [
                      {
                        "assignments": [
                          462
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 462,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "4439:7:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 470,
                            "src": "4434:12:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 461,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4434:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 463,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4434:12:1"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "4466:1260:1",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4530:36:1",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4561:4:1",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4555:5:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4555:11:1"
                              },
                              "variables": [
                                {
                                  "name": "freeMemoryPointer",
                                  "nodeType": "YulTypedName",
                                  "src": "4534:17:1",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "freeMemoryPointer",
                                    "nodeType": "YulIdentifier",
                                    "src": "4684:17:1"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4703:66:1",
                                    "type": "",
                                    "value": "0x095ea7b300000000000000000000000000000000000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4677:6:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4677:93:1"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4677:93:1"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "freeMemoryPointer",
                                        "nodeType": "YulIdentifier",
                                        "src": "4794:17:1"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4813:1:1",
                                        "type": "",
                                        "value": "4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4790:3:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4790:25:1"
                                  },
                                  {
                                    "name": "to",
                                    "nodeType": "YulIdentifier",
                                    "src": "4817:2:1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4783:6:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4783:37:1"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4783:37:1"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "freeMemoryPointer",
                                        "nodeType": "YulIdentifier",
                                        "src": "4873:17:1"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4892:2:1",
                                        "type": "",
                                        "value": "36"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4869:3:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4869:26:1"
                                  },
                                  {
                                    "name": "amount",
                                    "nodeType": "YulIdentifier",
                                    "src": "4897:6:1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4862:6:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4862:42:1"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4862:42:1"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4951:765:1",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "5178:1:1",
                                                    "type": "",
                                                    "value": "0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5172:5:1"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5172:8:1"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5182:1:1",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "eq",
                                              "nodeType": "YulIdentifier",
                                              "src": "5169:2:1"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5169:15:1"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [],
                                                "functionName": {
                                                  "name": "returndatasize",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5189:14:1"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5189:16:1"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5207:2:1",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "gt",
                                              "nodeType": "YulIdentifier",
                                              "src": "5186:2:1"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5186:24:1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "5165:3:1"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5165:46:1"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [],
                                            "functionName": {
                                              "name": "returndatasize",
                                              "nodeType": "YulIdentifier",
                                              "src": "5220:14:1"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5220:16:1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "5213:6:1"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5213:24:1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "or",
                                      "nodeType": "YulIdentifier",
                                      "src": "5162:2:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5162:76:1"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [],
                                        "functionName": {
                                          "name": "gas",
                                          "nodeType": "YulIdentifier",
                                          "src": "5656:3:1"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5656:5:1"
                                      },
                                      {
                                        "name": "token",
                                        "nodeType": "YulIdentifier",
                                        "src": "5663:5:1"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5670:1:1",
                                        "type": "",
                                        "value": "0"
                                      },
                                      {
                                        "name": "freeMemoryPointer",
                                        "nodeType": "YulIdentifier",
                                        "src": "5673:17:1"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5692:2:1",
                                        "type": "",
                                        "value": "68"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5696:1:1",
                                        "type": "",
                                        "value": "0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5699:2:1",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "call",
                                      "nodeType": "YulIdentifier",
                                      "src": "5651:4:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5651:51:1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "4962:3:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4962:754:1"
                              },
                              "variableNames": [
                                {
                                  "name": "success",
                                  "nodeType": "YulIdentifier",
                                  "src": "4951:7:1"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 458,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4897:6:1",
                            "valueSize": 1
                          },
                          {
                            "declaration": 462,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4951:7:1",
                            "valueSize": 1
                          },
                          {
                            "declaration": 456,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4817:2:1",
                            "valueSize": 1
                          },
                          {
                            "declaration": 454,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5663:5:1",
                            "valueSize": 1
                          }
                        ],
                        "id": 464,
                        "nodeType": "InlineAssembly",
                        "src": "4457:1269:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 466,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 462,
                              "src": "5744:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "415050524f56455f4641494c4544",
                              "id": 467,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5753:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_cd400c5237ae346977ee020ef8d0d26a880c07edf7eba69a8848f0d31e9a88f2",
                                "typeString": "literal_string \"APPROVE_FAILED\""
                              },
                              "value": "APPROVE_FAILED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_cd400c5237ae346977ee020ef8d0d26a880c07edf7eba69a8848f0d31e9a88f2",
                                "typeString": "literal_string \"APPROVE_FAILED\""
                              }
                            ],
                            "id": 465,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5736:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 468,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5736:34:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 469,
                        "nodeType": "ExpressionStatement",
                        "src": "5736:34:1"
                      }
                    ]
                  },
                  "id": 471,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeApprove",
                  "nameLocation": "4332:11:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 459,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 454,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "4359:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 471,
                        "src": "4353:11:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$387",
                          "typeString": "contract ERC20"
                        },
                        "typeName": {
                          "id": 453,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 452,
                            "name": "ERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 387,
                            "src": "4353:5:1"
                          },
                          "referencedDeclaration": 387,
                          "src": "4353:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$387",
                            "typeString": "contract ERC20"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 456,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "4382:2:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 471,
                        "src": "4374:10:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 455,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4374:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 458,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "4402:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 471,
                        "src": "4394:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 457,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4394:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4343:71:1"
                  },
                  "returnParameters": {
                    "id": 460,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4424:0:1"
                  },
                  "scope": 472,
                  "src": "4323:1454:1",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 473,
              "src": "583:5196:1",
              "usedErrors": []
            }
          ],
          "src": "42:5738:1"
        },
        "id": 1
      },
      "contracts/splits/SplitMain.sol": {
        "ast": {
          "absolutePath": "contracts/splits/SplitMain.sol",
          "exportedSymbols": {
            "Clones": [
              2275
            ],
            "ERC20": [
              387
            ],
            "ISplitMain": [
              2191
            ],
            "InvalidNewController": [
              531
            ],
            "InvalidSplit__AccountsAndAllocationsMismatch": [
              501
            ],
            "InvalidSplit__AccountsOutOfOrder": [
              511
            ],
            "InvalidSplit__AllocationMustBePositive": [
              516
            ],
            "InvalidSplit__InvalidAllocationsSum": [
              506
            ],
            "InvalidSplit__InvalidDistributorFee": [
              521
            ],
            "InvalidSplit__InvalidHash": [
              526
            ],
            "InvalidSplit__TooFewAccounts": [
              494
            ],
            "SafeTransferLib": [
              472
            ],
            "SplitMain": [
              1875
            ],
            "SplitWallet": [
              1973
            ],
            "Unauthorized": [
              489
            ]
          },
          "id": 1876,
          "license": "GPL-3.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 474,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".4"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:2"
            },
            {
              "absolutePath": "contracts/splits/interfaces/ISplitMain.sol",
              "file": "./interfaces/ISplitMain.sol",
              "id": 476,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1876,
              "sourceUnit": 2192,
              "src": "70:55:2",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 475,
                    "name": "ISplitMain",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2191,
                    "src": "78:10:2",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/splits/SplitWallet.sol",
              "file": "./SplitWallet.sol",
              "id": 478,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1876,
              "sourceUnit": 1974,
              "src": "126:46:2",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 477,
                    "name": "SplitWallet",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1973,
                    "src": "134:11:2",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/splits/libraries/Clones.sol",
              "file": "./libraries/Clones.sol",
              "id": 480,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1876,
              "sourceUnit": 2276,
              "src": "173:46:2",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 479,
                    "name": "Clones",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2275,
                    "src": "181:6:2",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@rari-capital/solmate/src/tokens/ERC20.sol",
              "file": "@rari-capital/solmate/src/tokens/ERC20.sol",
              "id": 482,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1876,
              "sourceUnit": 388,
              "src": "220:65:2",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 481,
                    "name": "ERC20",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 387,
                    "src": "228:5:2",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@rari-capital/solmate/src/utils/SafeTransferLib.sol",
              "file": "@rari-capital/solmate/src/utils/SafeTransferLib.sol",
              "id": 484,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1876,
              "sourceUnit": 473,
              "src": "286:84:2",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 483,
                    "name": "SafeTransferLib",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 472,
                    "src": "294:15:2",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "documentation": {
                "id": 485,
                "nodeType": "StructuredDocumentation",
                "src": "9911:78:2",
                "text": "@notice Unauthorized sender `sender`\n @param sender Transaction sender"
              },
              "errorSelector": "8e4a23d6",
              "id": 489,
              "name": "Unauthorized",
              "nameLocation": "9995:12:2",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 488,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 487,
                    "mutability": "mutable",
                    "name": "sender",
                    "nameLocation": "10016:6:2",
                    "nodeType": "VariableDeclaration",
                    "scope": 489,
                    "src": "10008:14:2",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 486,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "10008:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "visibility": "internal"
                  }
                ],
                "src": "10007:16:2"
              },
              "src": "9989:35:2"
            },
            {
              "documentation": {
                "id": 490,
                "nodeType": "StructuredDocumentation",
                "src": "10025:129:2",
                "text": "@notice Invalid number of accounts `accountsLength`, must have at least 2\n @param accountsLength Length of accounts array"
              },
              "errorSelector": "e8c62650",
              "id": 494,
              "name": "InvalidSplit__TooFewAccounts",
              "nameLocation": "10160:28:2",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 493,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 492,
                    "mutability": "mutable",
                    "name": "accountsLength",
                    "nameLocation": "10197:14:2",
                    "nodeType": "VariableDeclaration",
                    "scope": 494,
                    "src": "10189:22:2",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 491,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "10189:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "visibility": "internal"
                  }
                ],
                "src": "10188:24:2"
              },
              "src": "10154:59:2"
            },
            {
              "documentation": {
                "id": 495,
                "nodeType": "StructuredDocumentation",
                "src": "10214:228:2",
                "text": "@notice Array lengths of accounts & percentAllocations don't match (`accountsLength` != `allocationsLength`)\n @param accountsLength Length of accounts array\n @param allocationsLength Length of percentAllocations array"
              },
              "errorSelector": "b34f351d",
              "id": 501,
              "name": "InvalidSplit__AccountsAndAllocationsMismatch",
              "nameLocation": "10448:44:2",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 500,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 497,
                    "mutability": "mutable",
                    "name": "accountsLength",
                    "nameLocation": "10501:14:2",
                    "nodeType": "VariableDeclaration",
                    "scope": 501,
                    "src": "10493:22:2",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 496,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "10493:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 499,
                    "mutability": "mutable",
                    "name": "allocationsLength",
                    "nameLocation": "10525:17:2",
                    "nodeType": "VariableDeclaration",
                    "scope": 501,
                    "src": "10517:25:2",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 498,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "10517:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "visibility": "internal"
                  }
                ],
                "src": "10492:51:2"
              },
              "src": "10442:102:2"
            },
            {
              "documentation": {
                "id": 502,
                "nodeType": "StructuredDocumentation",
                "src": "10545:148:2",
                "text": "@notice Invalid percentAllocations sum `allocationsSum` must equal `PERCENTAGE_SCALE`\n @param allocationsSum Sum of percentAllocations array"
              },
              "errorSelector": "fcc487c1",
              "id": 506,
              "name": "InvalidSplit__InvalidAllocationsSum",
              "nameLocation": "10699:35:2",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 505,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 504,
                    "mutability": "mutable",
                    "name": "allocationsSum",
                    "nameLocation": "10742:14:2",
                    "nodeType": "VariableDeclaration",
                    "scope": 506,
                    "src": "10735:21:2",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "typeName": {
                      "id": 503,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "10735:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "visibility": "internal"
                  }
                ],
                "src": "10734:23:2"
              },
              "src": "10693:65:2"
            },
            {
              "documentation": {
                "id": 507,
                "nodeType": "StructuredDocumentation",
                "src": "10759:96:2",
                "text": "@notice Invalid accounts ordering at `index`\n @param index Index of out-of-order account"
              },
              "errorSelector": "ac6bd233",
              "id": 511,
              "name": "InvalidSplit__AccountsOutOfOrder",
              "nameLocation": "10861:32:2",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 510,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 509,
                    "mutability": "mutable",
                    "name": "index",
                    "nameLocation": "10902:5:2",
                    "nodeType": "VariableDeclaration",
                    "scope": 511,
                    "src": "10894:13:2",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 508,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "10894:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "visibility": "internal"
                  }
                ],
                "src": "10893:15:2"
              },
              "src": "10855:54:2"
            },
            {
              "documentation": {
                "id": 512,
                "nodeType": "StructuredDocumentation",
                "src": "10910:106:2",
                "text": "@notice Invalid percentAllocation of zero at `index`\n @param index Index of zero percentAllocation"
              },
              "errorSelector": "0db7e4c7",
              "id": 516,
              "name": "InvalidSplit__AllocationMustBePositive",
              "nameLocation": "11022:38:2",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 515,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 514,
                    "mutability": "mutable",
                    "name": "index",
                    "nameLocation": "11069:5:2",
                    "nodeType": "VariableDeclaration",
                    "scope": 516,
                    "src": "11061:13:2",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 513,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "11061:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "visibility": "internal"
                  }
                ],
                "src": "11060:15:2"
              },
              "src": "11016:60:2"
            },
            {
              "documentation": {
                "id": 517,
                "nodeType": "StructuredDocumentation",
                "src": "11077:141:2",
                "text": "@notice Invalid distributorFee `distributorFee` cannot be greater than 10% (1e5)\n @param distributorFee Invalid distributorFee amount"
              },
              "errorSelector": "c211038c",
              "id": 521,
              "name": "InvalidSplit__InvalidDistributorFee",
              "nameLocation": "11224:35:2",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 520,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 519,
                    "mutability": "mutable",
                    "name": "distributorFee",
                    "nameLocation": "11267:14:2",
                    "nodeType": "VariableDeclaration",
                    "scope": 521,
                    "src": "11260:21:2",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "typeName": {
                      "id": 518,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "11260:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "visibility": "internal"
                  }
                ],
                "src": "11259:23:2"
              },
              "src": "11218:65:2"
            },
            {
              "documentation": {
                "id": 522,
                "nodeType": "StructuredDocumentation",
                "src": "11284:124:2",
                "text": "@notice Invalid hash `hash` from split data (accounts, percentAllocations, distributorFee)\n @param hash Invalid hash"
              },
              "errorSelector": "dd5ff457",
              "id": 526,
              "name": "InvalidSplit__InvalidHash",
              "nameLocation": "11414:25:2",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 525,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 524,
                    "mutability": "mutable",
                    "name": "hash",
                    "nameLocation": "11448:4:2",
                    "nodeType": "VariableDeclaration",
                    "scope": 526,
                    "src": "11440:12:2",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "typeName": {
                      "id": 523,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "11440:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "visibility": "internal"
                  }
                ],
                "src": "11439:14:2"
              },
              "src": "11408:46:2"
            },
            {
              "documentation": {
                "id": 527,
                "nodeType": "StructuredDocumentation",
                "src": "11455:126:2",
                "text": "@notice Invalid new controlling address `newController` for mutable split\n @param newController Invalid new controller"
              },
              "errorSelector": "c3691307",
              "id": 531,
              "name": "InvalidNewController",
              "nameLocation": "11587:20:2",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 530,
                "nodeType": "ParameterList",
                "parameters": [
                  {
                    "constant": false,
                    "id": 529,
                    "mutability": "mutable",
                    "name": "newController",
                    "nameLocation": "11616:13:2",
                    "nodeType": "VariableDeclaration",
                    "scope": 531,
                    "src": "11608:21:2",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 528,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "11608:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "visibility": "internal"
                  }
                ],
                "src": "11607:23:2"
              },
              "src": "11581:50:2"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 533,
                    "name": "ISplitMain",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2191,
                    "src": "12210:10:2"
                  },
                  "id": 534,
                  "nodeType": "InheritanceSpecifier",
                  "src": "12210:10:2"
                }
              ],
              "canonicalName": "SplitMain",
              "contractDependencies": [
                1973
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 532,
                "nodeType": "StructuredDocumentation",
                "src": "11633:554:2",
                "text": " @title SplitMain\n @author 0xSplits <will@0xSplits.xyz>\n @notice A composable and gas-efficient protocol for deploying splitter contracts.\n @dev Split recipients, ownerships, and keeper fees are stored onchain as calldata & re-passed as args / validated\n via hashing when needed. Each split gets its own address & proxy for maximum composability with other contracts onchain.\n For these proxies, we extended EIP-1167 Minimal Proxy Contract to avoid `DELEGATECALL` inside `receive()` to accept\n hard gas-capped `sends` & `transfers`."
              },
              "fullyImplemented": true,
              "id": 1875,
              "linearizedBaseContracts": [
                1875,
                2191
              ],
              "name": "SplitMain",
              "nameLocation": "12197:9:2",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "global": false,
                  "id": 537,
                  "libraryName": {
                    "id": 535,
                    "name": "SafeTransferLib",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 472,
                    "src": "12233:15:2"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "12227:34:2",
                  "typeName": {
                    "id": 536,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12253:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                },
                {
                  "global": false,
                  "id": 541,
                  "libraryName": {
                    "id": 538,
                    "name": "SafeTransferLib",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 472,
                    "src": "12272:15:2"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "12266:32:2",
                  "typeName": {
                    "id": 540,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 539,
                      "name": "ERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 387,
                      "src": "12292:5:2"
                    },
                    "referencedDeclaration": 387,
                    "src": "12292:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$387",
                      "typeString": "contract ERC20"
                    }
                  }
                },
                {
                  "canonicalName": "SplitMain.Split",
                  "id": 548,
                  "members": [
                    {
                      "constant": false,
                      "id": 543,
                      "mutability": "mutable",
                      "name": "hash",
                      "nameLocation": "12404:4:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 548,
                      "src": "12396:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 542,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "12396:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 545,
                      "mutability": "mutable",
                      "name": "controller",
                      "nameLocation": "12426:10:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 548,
                      "src": "12418:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 544,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "12418:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 547,
                      "mutability": "mutable",
                      "name": "newPotentialController",
                      "nameLocation": "12454:22:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 548,
                      "src": "12446:30:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 546,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "12446:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "Split",
                  "nameLocation": "12380:5:2",
                  "nodeType": "StructDefinition",
                  "scope": 1875,
                  "src": "12373:110:2",
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 549,
                    "nodeType": "StructuredDocumentation",
                    "src": "12578:66:2",
                    "text": "@notice constant to scale uints into percentages (1e6 == 100%)"
                  },
                  "functionSelector": "3f26479e",
                  "id": 552,
                  "mutability": "constant",
                  "name": "PERCENTAGE_SCALE",
                  "nameLocation": "12673:16:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 1875,
                  "src": "12649:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 550,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12649:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "316536",
                    "id": 551,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "12692:3:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1000000_by_1",
                      "typeString": "int_const 1000000"
                    },
                    "value": "1e6"
                  },
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 553,
                    "nodeType": "StructuredDocumentation",
                    "src": "12701:65:2",
                    "text": "@notice maximum distributor fee; 1e5 = 10% * PERCENTAGE_SCALE"
                  },
                  "id": 556,
                  "mutability": "constant",
                  "name": "MAX_DISTRIBUTOR_FEE",
                  "nameLocation": "12797:19:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 1875,
                  "src": "12771:51:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 554,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12771:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "316535",
                    "id": 555,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "12819:3:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_100000_by_1",
                      "typeString": "int_const 100000"
                    },
                    "value": "1e5"
                  },
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1984
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 557,
                    "nodeType": "StructuredDocumentation",
                    "src": "12828:62:2",
                    "text": "@notice address of wallet implementation for split proxies"
                  },
                  "functionSelector": "8117abc1",
                  "id": 560,
                  "mutability": "immutable",
                  "name": "walletImplementation",
                  "nameLocation": "12929:20:2",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 559,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "12920:8:2"
                  },
                  "scope": 1875,
                  "src": "12895:54:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 558,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12895:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 561,
                    "nodeType": "StructuredDocumentation",
                    "src": "13021:43:2",
                    "text": "@notice mapping to account ETH balances"
                  },
                  "id": 565,
                  "mutability": "mutable",
                  "name": "ethBalances",
                  "nameLocation": "13106:11:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 1875,
                  "src": "13069:48:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 564,
                    "keyType": {
                      "id": 562,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "13077:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "13069:27:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 563,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "13088:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 566,
                    "nodeType": "StructuredDocumentation",
                    "src": "13123:45:2",
                    "text": "@notice mapping to account ERC20 balances"
                  },
                  "id": 573,
                  "mutability": "mutable",
                  "name": "erc20Balances",
                  "nameLocation": "13228:13:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 1875,
                  "src": "13173:68:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_contract$_ERC20_$387_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(contract ERC20 => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 572,
                    "keyType": {
                      "id": 568,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 567,
                        "name": "ERC20",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 387,
                        "src": "13181:5:2"
                      },
                      "referencedDeclaration": 387,
                      "src": "13181:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$387",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "13173:45:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_contract$_ERC20_$387_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(contract ERC20 => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 571,
                      "keyType": {
                        "id": 569,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "13198:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "13190:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 570,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13209:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 574,
                    "nodeType": "StructuredDocumentation",
                    "src": "13247:37:2",
                    "text": "@notice mapping to Split metadata"
                  },
                  "id": 579,
                  "mutability": "mutable",
                  "name": "splits",
                  "nameLocation": "13324:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 1875,
                  "src": "13289:41:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                    "typeString": "mapping(address => struct SplitMain.Split)"
                  },
                  "typeName": {
                    "id": 578,
                    "keyType": {
                      "id": 575,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "13297:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "13289:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                      "typeString": "mapping(address => struct SplitMain.Split)"
                    },
                    "valueType": {
                      "id": 577,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 576,
                        "name": "Split",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 548,
                        "src": "13308:5:2"
                      },
                      "referencedDeclaration": 548,
                      "src": "13308:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Split_$548_storage_ptr",
                        "typeString": "struct SplitMain.Split"
                      }
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 598,
                    "nodeType": "Block",
                    "src": "13541:103:2",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 584,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "13555:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 585,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "13555:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 586,
                                "name": "splits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 579,
                                "src": "13569:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                  "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                                }
                              },
                              "id": 588,
                              "indexExpression": {
                                "id": 587,
                                "name": "split",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 582,
                                "src": "13576:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13569:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Split_$548_storage",
                                "typeString": "struct SplitMain.Split storage ref"
                              }
                            },
                            "id": 589,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "controller",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 545,
                            "src": "13569:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "13555:38:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 596,
                        "nodeType": "IfStatement",
                        "src": "13551:75:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 592,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "13615:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 593,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "13615:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 591,
                              "name": "Unauthorized",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 489,
                              "src": "13602:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                "typeString": "function (address) pure"
                              }
                            },
                            "id": 594,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13602:24:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 595,
                          "nodeType": "RevertStatement",
                          "src": "13595:31:2"
                        }
                      },
                      {
                        "id": 597,
                        "nodeType": "PlaceholderStatement",
                        "src": "13636:1:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 580,
                    "nodeType": "StructuredDocumentation",
                    "src": "13371:121:2",
                    "text": "@notice Reverts if the sender doesn't own the split `split`\n  @param split Address to check for control"
                  },
                  "id": 599,
                  "name": "onlySplitController",
                  "nameLocation": "13506:19:2",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 583,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 582,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "13534:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 599,
                        "src": "13526:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 581,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13526:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13525:15:2"
                  },
                  "src": "13497:147:2",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 618,
                    "nodeType": "Block",
                    "src": "13868:115:2",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 610,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 604,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "13882:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 605,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "13882:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 606,
                                "name": "splits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 579,
                                "src": "13896:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                  "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                                }
                              },
                              "id": 608,
                              "indexExpression": {
                                "id": 607,
                                "name": "split",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 602,
                                "src": "13903:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13896:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Split_$548_storage",
                                "typeString": "struct SplitMain.Split storage ref"
                              }
                            },
                            "id": 609,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "newPotentialController",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 547,
                            "src": "13896:36:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "13882:50:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 616,
                        "nodeType": "IfStatement",
                        "src": "13878:87:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 612,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "13954:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 613,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "13954:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 611,
                              "name": "Unauthorized",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 489,
                              "src": "13941:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                "typeString": "function (address) pure"
                              }
                            },
                            "id": 614,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13941:24:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 615,
                          "nodeType": "RevertStatement",
                          "src": "13934:31:2"
                        }
                      },
                      {
                        "id": 617,
                        "nodeType": "PlaceholderStatement",
                        "src": "13975:1:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 600,
                    "nodeType": "StructuredDocumentation",
                    "src": "13650:157:2",
                    "text": "@notice Reverts if the sender isn't the new potential controller of split `split`\n  @param split Address to check for new potential control"
                  },
                  "id": 619,
                  "name": "onlySplitNewPotentialController",
                  "nameLocation": "13821:31:2",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 603,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 602,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "13861:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 619,
                        "src": "13853:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 601,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13853:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13852:15:2"
                  },
                  "src": "13812:171:2",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 734,
                    "nodeType": "Block",
                    "src": "14509:1353:2",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 633,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 630,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 623,
                              "src": "14523:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 631,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "14523:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "hexValue": "32",
                            "id": 632,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14541:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "14523:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 639,
                        "nodeType": "IfStatement",
                        "src": "14519:77:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 635,
                                  "name": "accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 623,
                                  "src": "14580:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 636,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "14580:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 634,
                              "name": "InvalidSplit__TooFewAccounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 494,
                              "src": "14551:28:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$",
                                "typeString": "function (uint256) pure"
                              }
                            },
                            "id": 637,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14551:45:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 638,
                          "nodeType": "RevertStatement",
                          "src": "14544:52:2"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 644,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 640,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 623,
                              "src": "14610:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 641,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "14610:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "id": 642,
                              "name": "percentAllocations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 626,
                              "src": "14629:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                "typeString": "uint32[] memory"
                              }
                            },
                            "id": 643,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "14629:25:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14610:44:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 652,
                        "nodeType": "IfStatement",
                        "src": "14606:157:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 646,
                                  "name": "accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 623,
                                  "src": "14720:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 647,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "14720:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "expression": {
                                  "id": 648,
                                  "name": "percentAllocations",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 626,
                                  "src": "14737:18:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                    "typeString": "uint32[] memory"
                                  }
                                },
                                "id": 649,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "14737:25:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 645,
                              "name": "InvalidSplit__AccountsAndAllocationsMismatch",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 501,
                              "src": "14675:44:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$",
                                "typeString": "function (uint256,uint256) pure"
                              }
                            },
                            "id": 650,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14675:88:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 651,
                          "nodeType": "RevertStatement",
                          "src": "14668:95:2"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 654,
                                "name": "percentAllocations",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 626,
                                "src": "14852:18:2",
                                "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"
                                }
                              ],
                              "id": 653,
                              "name": "_getSum",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1408,
                              "src": "14844:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint32_$dyn_memory_ptr_$returns$_t_uint32_$",
                                "typeString": "function (uint32[] memory) pure returns (uint32)"
                              }
                            },
                            "id": 655,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14844:27:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 656,
                            "name": "PERCENTAGE_SCALE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 552,
                            "src": "14875:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14844:47:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 664,
                        "nodeType": "IfStatement",
                        "src": "14840:136:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 660,
                                    "name": "percentAllocations",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 626,
                                    "src": "14956:18:2",
                                    "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"
                                    }
                                  ],
                                  "id": 659,
                                  "name": "_getSum",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1408,
                                  "src": "14948:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint32_$dyn_memory_ptr_$returns$_t_uint32_$",
                                    "typeString": "function (uint32[] memory) pure returns (uint32)"
                                  }
                                },
                                "id": 661,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14948:27:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 658,
                              "name": "InvalidSplit__InvalidAllocationsSum",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 506,
                              "src": "14912:35:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$_t_uint32_$returns$__$",
                                "typeString": "function (uint32) pure"
                              }
                            },
                            "id": 662,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14912:64:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 663,
                          "nodeType": "RevertStatement",
                          "src": "14905:71:2"
                        }
                      },
                      {
                        "id": 724,
                        "nodeType": "UncheckedBlock",
                        "src": "14986:749:2",
                        "statements": [
                          {
                            "assignments": [
                              666
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 666,
                                "mutability": "mutable",
                                "name": "loopLength",
                                "nameLocation": "15130:10:2",
                                "nodeType": "VariableDeclaration",
                                "scope": 724,
                                "src": "15122:18:2",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 665,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15122:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 671,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 670,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 667,
                                  "name": "accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 623,
                                  "src": "15143:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 668,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "15143:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 669,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "15161:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "15143:19:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "15122:40:2"
                          },
                          {
                            "body": {
                              "id": 709,
                              "nodeType": "Block",
                              "src": "15217:287:2",
                              "statements": [
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    "id": 690,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "baseExpression": {
                                        "id": 682,
                                        "name": "accounts",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 623,
                                        "src": "15309:8:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                          "typeString": "address[] memory"
                                        }
                                      },
                                      "id": 684,
                                      "indexExpression": {
                                        "id": 683,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 673,
                                        "src": "15318:1:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "15309:11:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">=",
                                    "rightExpression": {
                                      "baseExpression": {
                                        "id": 685,
                                        "name": "accounts",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 623,
                                        "src": "15324:8:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                          "typeString": "address[] memory"
                                        }
                                      },
                                      "id": 689,
                                      "indexExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 688,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 686,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 673,
                                          "src": "15333:1:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "hexValue": "31",
                                          "id": 687,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "15337:1:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "src": "15333:5:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "15324:15:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "src": "15309:30:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 695,
                                  "nodeType": "IfStatement",
                                  "src": "15305:78:2",
                                  "trueBody": {
                                    "errorCall": {
                                      "arguments": [
                                        {
                                          "id": 692,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 673,
                                          "src": "15381:1:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 691,
                                        "name": "InvalidSplit__AccountsOutOfOrder",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 511,
                                        "src": "15348:32:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$",
                                          "typeString": "function (uint256) pure"
                                        }
                                      },
                                      "id": 693,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "15348:35:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 694,
                                    "nodeType": "RevertStatement",
                                    "src": "15341:42:2"
                                  }
                                },
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    },
                                    "id": 703,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "baseExpression": {
                                        "id": 696,
                                        "name": "percentAllocations",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 626,
                                        "src": "15405:18:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                          "typeString": "uint32[] memory"
                                        }
                                      },
                                      "id": 698,
                                      "indexExpression": {
                                        "id": 697,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 673,
                                        "src": "15424:1:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "15405:21:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint32",
                                        "typeString": "uint32"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "arguments": [
                                        {
                                          "hexValue": "30",
                                          "id": 701,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "15437:1:2",
                                          "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": 700,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "15430:6:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint32_$",
                                          "typeString": "type(uint32)"
                                        },
                                        "typeName": {
                                          "id": 699,
                                          "name": "uint32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "15430:6:2",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 702,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "15430:9:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint32",
                                        "typeString": "uint32"
                                      }
                                    },
                                    "src": "15405:34:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 708,
                                  "nodeType": "IfStatement",
                                  "src": "15401:88:2",
                                  "trueBody": {
                                    "errorCall": {
                                      "arguments": [
                                        {
                                          "id": 705,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 673,
                                          "src": "15487:1:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 704,
                                        "name": "InvalidSplit__AllocationMustBePositive",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 516,
                                        "src": "15448:38:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$",
                                          "typeString": "function (uint256) pure"
                                        }
                                      },
                                      "id": 706,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "15448:41:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 707,
                                    "nodeType": "RevertStatement",
                                    "src": "15441:48:2"
                                  }
                                }
                              ]
                            },
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 678,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 676,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 673,
                                "src": "15196:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 677,
                                "name": "loopLength",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 666,
                                "src": "15200:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "15196:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 710,
                            "initializationExpression": {
                              "assignments": [
                                673
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 673,
                                  "mutability": "mutable",
                                  "name": "i",
                                  "nameLocation": "15189:1:2",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 710,
                                  "src": "15181:9:2",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 672,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15181:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 675,
                              "initialValue": {
                                "hexValue": "30",
                                "id": 674,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "15193:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15181:13:2"
                            },
                            "loopExpression": {
                              "expression": {
                                "id": 680,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": true,
                                "src": "15212:3:2",
                                "subExpression": {
                                  "id": 679,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 673,
                                  "src": "15214:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 681,
                              "nodeType": "ExpressionStatement",
                              "src": "15212:3:2"
                            },
                            "nodeType": "ForStatement",
                            "src": "15176:328:2"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              "id": 718,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "id": 711,
                                  "name": "percentAllocations",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 626,
                                  "src": "15622:18:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                    "typeString": "uint32[] memory"
                                  }
                                },
                                "id": 713,
                                "indexExpression": {
                                  "id": 712,
                                  "name": "loopLength",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 666,
                                  "src": "15641:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "15622:30:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 716,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "15663:1:2",
                                    "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": 715,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15656:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint32_$",
                                    "typeString": "type(uint32)"
                                  },
                                  "typeName": {
                                    "id": 714,
                                    "name": "uint32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15656:6:2",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 717,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15656:9:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "src": "15622:43:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 723,
                            "nodeType": "IfStatement",
                            "src": "15618:106:2",
                            "trueBody": {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 720,
                                    "name": "loopLength",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 666,
                                    "src": "15713:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 719,
                                  "name": "InvalidSplit__AllocationMustBePositive",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 516,
                                  "src": "15674:38:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) pure"
                                  }
                                },
                                "id": 721,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15674:50:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 722,
                              "nodeType": "RevertStatement",
                              "src": "15667:57:2"
                            }
                          }
                        ]
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 725,
                            "name": "distributorFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 628,
                            "src": "15748:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 726,
                            "name": "MAX_DISTRIBUTOR_FEE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 556,
                            "src": "15765:19:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15748:36:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 732,
                        "nodeType": "IfStatement",
                        "src": "15744:100:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [
                              {
                                "id": 729,
                                "name": "distributorFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 628,
                                "src": "15829:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 728,
                              "name": "InvalidSplit__InvalidDistributorFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 521,
                              "src": "15793:35:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$_t_uint32_$returns$__$",
                                "typeString": "function (uint32) pure"
                              }
                            },
                            "id": 730,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15793:51:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 731,
                          "nodeType": "RevertStatement",
                          "src": "15786:58:2"
                        }
                      },
                      {
                        "id": 733,
                        "nodeType": "PlaceholderStatement",
                        "src": "15854:1:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 620,
                    "nodeType": "StructuredDocumentation",
                    "src": "13989:379:2",
                    "text": "@notice Reverts if the split with recipients represented by `accounts` and `percentAllocations` is malformed\n  @param accounts Ordered, unique list of addresses with ownership in the split\n  @param percentAllocations Percent allocations associated with each address\n  @param distributorFee Keeper fee paid by split to cover gas costs of distribution"
                  },
                  "id": 735,
                  "name": "validSplit",
                  "nameLocation": "14382:10:2",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 629,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 623,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "14419:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 735,
                        "src": "14402:25:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 621,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "14402:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 622,
                          "nodeType": "ArrayTypeName",
                          "src": "14402:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 626,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "14453:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 735,
                        "src": "14437:34:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 624,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "14437:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 625,
                          "nodeType": "ArrayTypeName",
                          "src": "14437:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 628,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "14488:14:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 735,
                        "src": "14481:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 627,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "14481:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14392:116:2"
                  },
                  "src": "14373:1489:2",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 752,
                    "nodeType": "Block",
                    "src": "16052:103:2",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 740,
                            "name": "newController",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 738,
                            "src": "16066:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 743,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "16091:1:2",
                                "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": 742,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "16083:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 741,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "16083:7:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 744,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16083:10:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "16066:27:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 750,
                        "nodeType": "IfStatement",
                        "src": "16062:75:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [
                              {
                                "id": 747,
                                "name": "newController",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 738,
                                "src": "16123:13:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 746,
                              "name": "InvalidNewController",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 531,
                              "src": "16102:20:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                "typeString": "function (address) pure"
                              }
                            },
                            "id": 748,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16102:35:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 749,
                          "nodeType": "RevertStatement",
                          "src": "16095:42:2"
                        }
                      },
                      {
                        "id": 751,
                        "nodeType": "PlaceholderStatement",
                        "src": "16147:1:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 736,
                    "nodeType": "StructuredDocumentation",
                    "src": "15868:128:2",
                    "text": "@notice Reverts if `newController` is the zero address\n  @param newController Proposed new controlling address"
                  },
                  "id": 753,
                  "name": "validNewController",
                  "nameLocation": "16010:18:2",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 739,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 738,
                        "mutability": "mutable",
                        "name": "newController",
                        "nameLocation": "16037:13:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 753,
                        "src": "16029:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 737,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16029:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16028:23:2"
                  },
                  "src": "16001:154:2",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 767,
                    "nodeType": "Block",
                    "src": "16211:66:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 765,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 757,
                            "name": "walletImplementation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 560,
                            "src": "16221:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 762,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "NewExpression",
                                  "src": "16252:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_SplitWallet_$1973_$",
                                    "typeString": "function () returns (contract SplitWallet)"
                                  },
                                  "typeName": {
                                    "id": 761,
                                    "nodeType": "UserDefinedTypeName",
                                    "pathNode": {
                                      "id": 760,
                                      "name": "SplitWallet",
                                      "nodeType": "IdentifierPath",
                                      "referencedDeclaration": 1973,
                                      "src": "16256:11:2"
                                    },
                                    "referencedDeclaration": 1973,
                                    "src": "16256:11:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_SplitWallet_$1973",
                                      "typeString": "contract SplitWallet"
                                    }
                                  }
                                },
                                "id": 763,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16252:17:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_SplitWallet_$1973",
                                  "typeString": "contract SplitWallet"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_SplitWallet_$1973",
                                  "typeString": "contract SplitWallet"
                                }
                              ],
                              "id": 759,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "16244:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 758,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "16244:7:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 764,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16244:26:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "16221:49:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 766,
                        "nodeType": "ExpressionStatement",
                        "src": "16221:49:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 754,
                    "nodeType": "StructuredDocumentation",
                    "src": "16161:30:2",
                    "text": " CONSTRUCTOR"
                  },
                  "id": 768,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 755,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16208:2:2"
                  },
                  "returnParameters": {
                    "id": 756,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16211:0:2"
                  },
                  "scope": 1875,
                  "src": "16197:80:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 772,
                    "nodeType": "Block",
                    "src": "16587:2:2",
                    "statements": []
                  },
                  "documentation": {
                    "id": 769,
                    "nodeType": "StructuredDocumentation",
                    "src": "16371:184:2",
                    "text": "@notice Receive ETH\n  @dev Used by split proxies in `distributeETH` to transfer ETH to `SplitMain`\n  Funds sent outside of `distributeETH` will be unrecoverable"
                  },
                  "id": 773,
                  "implemented": true,
                  "kind": "receive",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 770,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16567:2:2"
                  },
                  "returnParameters": {
                    "id": 771,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16587:0:2"
                  },
                  "scope": 1875,
                  "src": "16560:29:2",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    1999
                  ],
                  "body": {
                    "id": 845,
                    "nodeType": "Block",
                    "src": "17437:559:2",
                    "statements": [
                      {
                        "assignments": [
                          796
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 796,
                            "mutability": "mutable",
                            "name": "splitHash",
                            "nameLocation": "17455:9:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 845,
                            "src": "17447:17:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 795,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "17447:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 802,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 798,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 777,
                              "src": "17478:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            {
                              "id": 799,
                              "name": "percentAllocations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 780,
                              "src": "17488:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              }
                            },
                            {
                              "id": 800,
                              "name": "distributorFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 782,
                              "src": "17508:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 797,
                            "name": "_hashSplit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1432,
                            "src": "17467:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_uint32_$returns$_t_bytes32_$",
                              "typeString": "function (address[] memory,uint32[] memory,uint32) pure returns (bytes32)"
                            }
                          },
                          "id": 801,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17467:56:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "17447:76:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 808,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 803,
                            "name": "controller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 784,
                            "src": "17537:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 806,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "17559:1:2",
                                "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": 805,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "17551:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 804,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "17551:7:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 807,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "17551:10:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "17537:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 832,
                          "nodeType": "Block",
                          "src": "17698:154:2",
                          "statements": [
                            {
                              "expression": {
                                "id": 823,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 818,
                                  "name": "split",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 793,
                                  "src": "17748:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 821,
                                      "name": "walletImplementation",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 560,
                                      "src": "17769:20:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 819,
                                      "name": "Clones",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2275,
                                      "src": "17756:6:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Clones_$2275_$",
                                        "typeString": "type(library Clones)"
                                      }
                                    },
                                    "id": 820,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "clone",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2219,
                                    "src": "17756:12:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_address_$",
                                      "typeString": "function (address) returns (address)"
                                    }
                                  },
                                  "id": 822,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "17756:34:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "17748:42:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 824,
                              "nodeType": "ExpressionStatement",
                              "src": "17748:42:2"
                            },
                            {
                              "expression": {
                                "id": 830,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 825,
                                      "name": "splits",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 579,
                                      "src": "17804:6:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                        "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                                      }
                                    },
                                    "id": 827,
                                    "indexExpression": {
                                      "id": 826,
                                      "name": "split",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 793,
                                      "src": "17811:5:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "17804:13:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Split_$548_storage",
                                      "typeString": "struct SplitMain.Split storage ref"
                                    }
                                  },
                                  "id": 828,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "controller",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 545,
                                  "src": "17804:24:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 829,
                                  "name": "controller",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 784,
                                  "src": "17831:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "17804:37:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 831,
                              "nodeType": "ExpressionStatement",
                              "src": "17804:37:2"
                            }
                          ]
                        },
                        "id": 833,
                        "nodeType": "IfStatement",
                        "src": "17533:319:2",
                        "trueBody": {
                          "id": 817,
                          "nodeType": "Block",
                          "src": "17563:129:2",
                          "statements": [
                            {
                              "expression": {
                                "id": 815,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 809,
                                  "name": "split",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 793,
                                  "src": "17615:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 812,
                                      "name": "walletImplementation",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 560,
                                      "src": "17649:20:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 813,
                                      "name": "splitHash",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 796,
                                      "src": "17671:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "expression": {
                                      "id": 810,
                                      "name": "Clones",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2275,
                                      "src": "17623:6:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Clones_$2275_$",
                                        "typeString": "type(library Clones)"
                                      }
                                    },
                                    "id": 811,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "cloneDeterministic",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2240,
                                    "src": "17623:25:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$",
                                      "typeString": "function (address,bytes32) returns (address)"
                                    }
                                  },
                                  "id": 814,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "17623:58:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "17615:66:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 816,
                              "nodeType": "ExpressionStatement",
                              "src": "17615:66:2"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 839,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 834,
                                "name": "splits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 579,
                                "src": "17926:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                  "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                                }
                              },
                              "id": 836,
                              "indexExpression": {
                                "id": 835,
                                "name": "split",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 793,
                                "src": "17933:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "17926:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Split_$548_storage",
                                "typeString": "struct SplitMain.Split storage ref"
                              }
                            },
                            "id": 837,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "hash",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 543,
                            "src": "17926:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 838,
                            "name": "splitHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 796,
                            "src": "17947:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "17926:30:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 840,
                        "nodeType": "ExpressionStatement",
                        "src": "17926:30:2"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 842,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 793,
                              "src": "17983:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 841,
                            "name": "CreateSplit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2129,
                            "src": "17971:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 843,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17971:18:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 844,
                        "nodeType": "EmitStatement",
                        "src": "17966:23:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 774,
                    "nodeType": "StructuredDocumentation",
                    "src": "16595:569:2",
                    "text": "@notice Creates a new split with recipients `accounts` with ownerships `percentAllocations`, a keeper fee for splitting of `distributorFee` and the controlling address `controller`\n  @param accounts Ordered, unique list of addresses with ownership in the split\n  @param percentAllocations Percent allocations associated with each address\n  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n  @param controller Controlling address (0x0 if immutable)\n  @return split Address of newly created split"
                  },
                  "functionSelector": "7601f782",
                  "id": 846,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 788,
                          "name": "accounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 777,
                          "src": "17367:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        {
                          "id": 789,
                          "name": "percentAllocations",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 780,
                          "src": "17377:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                            "typeString": "uint32[] calldata"
                          }
                        },
                        {
                          "id": 790,
                          "name": "distributorFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 782,
                          "src": "17397:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        }
                      ],
                      "id": 791,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 787,
                        "name": "validSplit",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 735,
                        "src": "17356:10:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "17356:56:2"
                    }
                  ],
                  "name": "createSplit",
                  "nameLocation": "17178:11:2",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 786,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "17347:8:2"
                  },
                  "parameters": {
                    "id": 785,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 777,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "17218:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 846,
                        "src": "17199:27:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 775,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "17199:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 776,
                          "nodeType": "ArrayTypeName",
                          "src": "17199:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 780,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "17254:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 846,
                        "src": "17236:36:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 778,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "17236:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 779,
                          "nodeType": "ArrayTypeName",
                          "src": "17236:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 782,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "17289:14:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 846,
                        "src": "17282:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 781,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "17282:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 784,
                        "mutability": "mutable",
                        "name": "controller",
                        "nameLocation": "17321:10:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 846,
                        "src": "17313:18:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 783,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "17313:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17189:148:2"
                  },
                  "returnParameters": {
                    "id": 794,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 793,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "17430:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 846,
                        "src": "17422:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 792,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "17422:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17421:15:2"
                  },
                  "scope": 1875,
                  "src": "17169:827:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2012
                  ],
                  "body": {
                    "id": 882,
                    "nodeType": "Block",
                    "src": "18781:178:2",
                    "statements": [
                      {
                        "assignments": [
                          867
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 867,
                            "mutability": "mutable",
                            "name": "splitHash",
                            "nameLocation": "18799:9:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 882,
                            "src": "18791:17:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 866,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "18791:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 873,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 869,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 850,
                              "src": "18822:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            {
                              "id": 870,
                              "name": "percentAllocations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 853,
                              "src": "18832:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              }
                            },
                            {
                              "id": 871,
                              "name": "distributorFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 855,
                              "src": "18852:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 868,
                            "name": "_hashSplit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1432,
                            "src": "18811:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_uint32_$returns$_t_bytes32_$",
                              "typeString": "function (address[] memory,uint32[] memory,uint32) pure returns (bytes32)"
                            }
                          },
                          "id": 872,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18811:56:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18791:76:2"
                      },
                      {
                        "expression": {
                          "id": 880,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 874,
                            "name": "split",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 864,
                            "src": "18877:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 877,
                                "name": "walletImplementation",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 560,
                                "src": "18920:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 878,
                                "name": "splitHash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 867,
                                "src": "18942:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "id": 875,
                                "name": "Clones",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2275,
                                "src": "18885:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Clones_$2275_$",
                                  "typeString": "type(library Clones)"
                                }
                              },
                              "id": 876,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "predictDeterministicAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2274,
                              "src": "18885:34:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_address_$",
                                "typeString": "function (address,bytes32) view returns (address)"
                              }
                            },
                            "id": 879,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18885:67:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "18877:75:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 881,
                        "nodeType": "ExpressionStatement",
                        "src": "18877:75:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 847,
                    "nodeType": "StructuredDocumentation",
                    "src": "18002:512:2",
                    "text": "@notice Predicts the address for an immutable split created with recipients `accounts` with ownerships `percentAllocations` and a keeper fee for splitting of `distributorFee`\n  @param accounts Ordered, unique list of addresses with ownership in the split\n  @param percentAllocations Percent allocations associated with each address\n  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n  @return split Predicted address of such an immutable split"
                  },
                  "functionSelector": "52844dd3",
                  "id": 883,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 859,
                          "name": "accounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 850,
                          "src": "18711:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        {
                          "id": 860,
                          "name": "percentAllocations",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 853,
                          "src": "18721:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                            "typeString": "uint32[] calldata"
                          }
                        },
                        {
                          "id": 861,
                          "name": "distributorFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 855,
                          "src": "18741:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        }
                      ],
                      "id": 862,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 858,
                        "name": "validSplit",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 735,
                        "src": "18700:10:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "18700:56:2"
                    }
                  ],
                  "name": "predictImmutableSplitAddress",
                  "nameLocation": "18528:28:2",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 857,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "18691:8:2"
                  },
                  "parameters": {
                    "id": 856,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 850,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "18585:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 883,
                        "src": "18566:27:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 848,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "18566:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 849,
                          "nodeType": "ArrayTypeName",
                          "src": "18566:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 853,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "18621:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 883,
                        "src": "18603:36:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 851,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "18603:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 852,
                          "nodeType": "ArrayTypeName",
                          "src": "18603:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 855,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "18656:14:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 883,
                        "src": "18649:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 854,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "18649:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18556:120:2"
                  },
                  "returnParameters": {
                    "id": 865,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 864,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "18774:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 883,
                        "src": "18766:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 863,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18766:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18765:15:2"
                  },
                  "scope": 1875,
                  "src": "18519:440:2",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2025
                  ],
                  "body": {
                    "id": 913,
                    "nodeType": "Block",
                    "src": "19711:82:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 907,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 886,
                              "src": "19734:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 908,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 889,
                              "src": "19741:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            {
                              "id": 909,
                              "name": "percentAllocations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 892,
                              "src": "19751:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              }
                            },
                            {
                              "id": 910,
                              "name": "distributorFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 894,
                              "src": "19771:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 906,
                            "name": "_updateSplit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1466,
                            "src": "19721:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_address_$dyn_calldata_ptr_$_t_array$_t_uint32_$dyn_calldata_ptr_$_t_uint32_$returns$__$",
                              "typeString": "function (address,address[] calldata,uint32[] calldata,uint32)"
                            }
                          },
                          "id": 911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19721:65:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 912,
                        "nodeType": "ExpressionStatement",
                        "src": "19721:65:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 884,
                    "nodeType": "StructuredDocumentation",
                    "src": "18965:475:2",
                    "text": "@notice Updates an existing split with recipients `accounts` with ownerships `percentAllocations` and a keeper fee for splitting of `distributorFee`\n  @param split Address of mutable split to update\n  @param accounts Ordered, unique list of addresses with ownership in the split\n  @param percentAllocations Percent allocations associated with each address\n  @param distributorFee Keeper fee paid by split to cover gas costs of distribution"
                  },
                  "functionSelector": "ecef0ace",
                  "id": 914,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 898,
                          "name": "split",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 886,
                          "src": "19647:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 899,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 897,
                        "name": "onlySplitController",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 599,
                        "src": "19627:19:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "19627:26:2"
                    },
                    {
                      "arguments": [
                        {
                          "id": 901,
                          "name": "accounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 889,
                          "src": "19665:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        {
                          "id": 902,
                          "name": "percentAllocations",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 892,
                          "src": "19675:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                            "typeString": "uint32[] calldata"
                          }
                        },
                        {
                          "id": 903,
                          "name": "distributorFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 894,
                          "src": "19695:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        }
                      ],
                      "id": 904,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 900,
                        "name": "validSplit",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 735,
                        "src": "19654:10:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "19654:56:2"
                    }
                  ],
                  "name": "updateSplit",
                  "nameLocation": "19454:11:2",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 896,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "19618:8:2"
                  },
                  "parameters": {
                    "id": 895,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 886,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "19483:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 914,
                        "src": "19475:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 885,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19475:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 889,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "19517:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 914,
                        "src": "19498:27:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 887,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "19498:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 888,
                          "nodeType": "ArrayTypeName",
                          "src": "19498:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 892,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "19553:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 914,
                        "src": "19535:36:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 890,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "19535:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 891,
                          "nodeType": "ArrayTypeName",
                          "src": "19535:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 894,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "19588:14:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 914,
                        "src": "19581:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 893,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "19581:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19465:143:2"
                  },
                  "returnParameters": {
                    "id": 905,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "19711:0:2"
                  },
                  "scope": 1875,
                  "src": "19445:348:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2032
                  ],
                  "body": {
                    "id": 941,
                    "nodeType": "Block",
                    "src": "20388:129:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 934,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 929,
                                "name": "splits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 579,
                                "src": "20398:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                  "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                                }
                              },
                              "id": 931,
                              "indexExpression": {
                                "id": 930,
                                "name": "split",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 917,
                                "src": "20405:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "20398:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Split_$548_storage",
                                "typeString": "struct SplitMain.Split storage ref"
                              }
                            },
                            "id": 932,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "newPotentialController",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 547,
                            "src": "20398:36:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 933,
                            "name": "newController",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 919,
                            "src": "20437:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "20398:52:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 935,
                        "nodeType": "ExpressionStatement",
                        "src": "20398:52:2"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 937,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 917,
                              "src": "20489:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 938,
                              "name": "newController",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 919,
                              "src": "20496:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 936,
                            "name": "InitiateControlTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2141,
                            "src": "20465:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 939,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20465:45:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 940,
                        "nodeType": "EmitStatement",
                        "src": "20460:50:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 915,
                    "nodeType": "StructuredDocumentation",
                    "src": "19799:406:2",
                    "text": "@notice Begins transfer of the controlling address of mutable split `split` to `newController`\n  @dev Two-step control transfer inspired by [dharma](https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/helpers/TwoStepOwnable.sol)\n  @param split Address of mutable split to transfer control for\n  @param newController Address to begin transferring control to"
                  },
                  "functionSelector": "d0e4b2f4",
                  "id": 942,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 923,
                          "name": "split",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 917,
                          "src": "20335:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 924,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 922,
                        "name": "onlySplitController",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 599,
                        "src": "20315:19:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "20315:26:2"
                    },
                    {
                      "arguments": [
                        {
                          "id": 926,
                          "name": "newController",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 919,
                          "src": "20369:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 927,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 925,
                        "name": "validNewController",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 753,
                        "src": "20350:18:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "20350:33:2"
                    }
                  ],
                  "name": "transferControl",
                  "nameLocation": "20219:15:2",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 921,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "20298:8:2"
                  },
                  "parameters": {
                    "id": 920,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 917,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "20243:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 942,
                        "src": "20235:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 916,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20235:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 919,
                        "mutability": "mutable",
                        "name": "newController",
                        "nameLocation": "20258:13:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 942,
                        "src": "20250:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 918,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20250:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20234:38:2"
                  },
                  "returnParameters": {
                    "id": 928,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "20388:0:2"
                  },
                  "scope": 1875,
                  "src": "20210:307:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2037
                  ],
                  "body": {
                    "id": 962,
                    "nodeType": "Block",
                    "src": "20784:103:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 956,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "20794:43:2",
                          "subExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 952,
                                "name": "splits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 579,
                                "src": "20801:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                  "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                                }
                              },
                              "id": 954,
                              "indexExpression": {
                                "id": 953,
                                "name": "split",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 945,
                                "src": "20808:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "20801:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Split_$548_storage",
                                "typeString": "struct SplitMain.Split storage ref"
                              }
                            },
                            "id": 955,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "newPotentialController",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 547,
                            "src": "20801:36:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 957,
                        "nodeType": "ExpressionStatement",
                        "src": "20794:43:2"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 959,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 945,
                              "src": "20874:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 958,
                            "name": "CancelControlTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2146,
                            "src": "20852:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 960,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20852:28:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 961,
                        "nodeType": "EmitStatement",
                        "src": "20847:33:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 943,
                    "nodeType": "StructuredDocumentation",
                    "src": "20523:165:2",
                    "text": "@notice Cancels transfer of the controlling address of mutable split `split`\n  @param split Address of mutable split to cancel control transfer for"
                  },
                  "functionSelector": "1267c6da",
                  "id": 963,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 949,
                          "name": "split",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 945,
                          "src": "20777:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 950,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 948,
                        "name": "onlySplitController",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 599,
                        "src": "20757:19:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "20757:26:2"
                    }
                  ],
                  "name": "cancelControlTransfer",
                  "nameLocation": "20702:21:2",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 947,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "20748:8:2"
                  },
                  "parameters": {
                    "id": 946,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 945,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "20732:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 963,
                        "src": "20724:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 944,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20724:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20723:15:2"
                  },
                  "returnParameters": {
                    "id": 951,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "20784:0:2"
                  },
                  "scope": 1875,
                  "src": "20693:194:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2042
                  ],
                  "body": {
                    "id": 997,
                    "nodeType": "Block",
                    "src": "21158:182:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 977,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "21168:43:2",
                          "subExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 973,
                                "name": "splits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 579,
                                "src": "21175:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                  "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                                }
                              },
                              "id": 975,
                              "indexExpression": {
                                "id": 974,
                                "name": "split",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 966,
                                "src": "21182:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "21175:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Split_$548_storage",
                                "typeString": "struct SplitMain.Split storage ref"
                              }
                            },
                            "id": 976,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "newPotentialController",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 547,
                            "src": "21175:36:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 978,
                        "nodeType": "ExpressionStatement",
                        "src": "21168:43:2"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 980,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 966,
                              "src": "21242:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 981,
                                  "name": "splits",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 579,
                                  "src": "21249:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                    "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                                  }
                                },
                                "id": 983,
                                "indexExpression": {
                                  "id": 982,
                                  "name": "split",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 966,
                                  "src": "21256:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "21249:13:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Split_$548_storage",
                                  "typeString": "struct SplitMain.Split storage ref"
                                }
                              },
                              "id": 984,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "controller",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 545,
                              "src": "21249:24:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 985,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "21275:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 986,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "21275:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 979,
                            "name": "ControlTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2155,
                            "src": "21226:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address,address)"
                            }
                          },
                          "id": 987,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21226:60:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 988,
                        "nodeType": "EmitStatement",
                        "src": "21221:65:2"
                      },
                      {
                        "expression": {
                          "id": 995,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 989,
                                "name": "splits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 579,
                                "src": "21296:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                  "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                                }
                              },
                              "id": 991,
                              "indexExpression": {
                                "id": 990,
                                "name": "split",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 966,
                                "src": "21303:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "21296:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Split_$548_storage",
                                "typeString": "struct SplitMain.Split storage ref"
                              }
                            },
                            "id": 992,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "controller",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 545,
                            "src": "21296:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 993,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "21323:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 994,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "21323:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "21296:37:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 996,
                        "nodeType": "ExpressionStatement",
                        "src": "21296:37:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 964,
                    "nodeType": "StructuredDocumentation",
                    "src": "20893:165:2",
                    "text": "@notice Accepts transfer of the controlling address of mutable split `split`\n  @param split Address of mutable split to accept control transfer for"
                  },
                  "functionSelector": "c7de6440",
                  "id": 998,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 970,
                          "name": "split",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 966,
                          "src": "21151:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 971,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 969,
                        "name": "onlySplitNewPotentialController",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 619,
                        "src": "21119:31:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "21119:38:2"
                    }
                  ],
                  "name": "acceptControl",
                  "nameLocation": "21072:13:2",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 968,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "21110:8:2"
                  },
                  "parameters": {
                    "id": 967,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 966,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "21094:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 998,
                        "src": "21086:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 965,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "21086:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "21085:15:2"
                  },
                  "returnParameters": {
                    "id": 972,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21158:0:2"
                  },
                  "scope": 1875,
                  "src": "21063:277:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2047
                  ],
                  "body": {
                    "id": 1036,
                    "nodeType": "Block",
                    "src": "21560:182:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 1012,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "21570:43:2",
                          "subExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 1008,
                                "name": "splits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 579,
                                "src": "21577:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                  "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                                }
                              },
                              "id": 1010,
                              "indexExpression": {
                                "id": 1009,
                                "name": "split",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1001,
                                "src": "21584:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "21577:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Split_$548_storage",
                                "typeString": "struct SplitMain.Split storage ref"
                              }
                            },
                            "id": 1011,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "newPotentialController",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 547,
                            "src": "21577:36:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1013,
                        "nodeType": "ExpressionStatement",
                        "src": "21570:43:2"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 1015,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1001,
                              "src": "21644:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 1016,
                                  "name": "splits",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 579,
                                  "src": "21651:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                    "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                                  }
                                },
                                "id": 1018,
                                "indexExpression": {
                                  "id": 1017,
                                  "name": "split",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1001,
                                  "src": "21658:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "21651:13:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Split_$548_storage",
                                  "typeString": "struct SplitMain.Split storage ref"
                                }
                              },
                              "id": 1019,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "controller",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 545,
                              "src": "21651:24:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 1022,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "21685:1:2",
                                  "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": 1021,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "21677:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1020,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "21677:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1023,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "21677:10:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1014,
                            "name": "ControlTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2155,
                            "src": "21628:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address,address)"
                            }
                          },
                          "id": 1024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21628:60:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1025,
                        "nodeType": "EmitStatement",
                        "src": "21623:65:2"
                      },
                      {
                        "expression": {
                          "id": 1034,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1026,
                                "name": "splits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 579,
                                "src": "21698:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                  "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                                }
                              },
                              "id": 1028,
                              "indexExpression": {
                                "id": 1027,
                                "name": "split",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1001,
                                "src": "21705:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "21698:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Split_$548_storage",
                                "typeString": "struct SplitMain.Split storage ref"
                              }
                            },
                            "id": 1029,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "controller",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 545,
                            "src": "21698:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1032,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "21733:1:2",
                                "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": 1031,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "21725:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1030,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "21725:7:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1033,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21725:10:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "21698:37:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1035,
                        "nodeType": "ExpressionStatement",
                        "src": "21698:37:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 999,
                    "nodeType": "StructuredDocumentation",
                    "src": "21346:121:2",
                    "text": "@notice Turns mutable split `split` immutable\n  @param split Address of mutable split to turn immutable"
                  },
                  "functionSelector": "189cbaa0",
                  "id": 1037,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 1005,
                          "name": "split",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1001,
                          "src": "21553:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 1006,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1004,
                        "name": "onlySplitController",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 599,
                        "src": "21533:19:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "21533:26:2"
                    }
                  ],
                  "name": "makeSplitImmutable",
                  "nameLocation": "21481:18:2",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1003,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "21524:8:2"
                  },
                  "parameters": {
                    "id": 1002,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1001,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "21508:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1037,
                        "src": "21500:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1000,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "21500:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "21499:15:2"
                  },
                  "returnParameters": {
                    "id": 1007,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21560:0:2"
                  },
                  "scope": 1875,
                  "src": "21472:270:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2062
                  ],
                  "body": {
                    "id": 1074,
                    "nodeType": "Block",
                    "src": "22652:266:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1060,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1040,
                              "src": "22762:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1061,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1043,
                              "src": "22769:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            {
                              "id": 1062,
                              "name": "percentAllocations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1046,
                              "src": "22779:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              }
                            },
                            {
                              "id": 1063,
                              "name": "distributorFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1048,
                              "src": "22799:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 1059,
                            "name": "_validSplitHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1500,
                            "src": "22746:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_uint32_$returns$__$",
                              "typeString": "function (address,address[] memory,uint32[] memory,uint32) view"
                            }
                          },
                          "id": 1064,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22746:68:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1065,
                        "nodeType": "ExpressionStatement",
                        "src": "22746:68:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1067,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1040,
                              "src": "22839:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1068,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1043,
                              "src": "22846:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            {
                              "id": 1069,
                              "name": "percentAllocations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1046,
                              "src": "22856:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              }
                            },
                            {
                              "id": 1070,
                              "name": "distributorFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1048,
                              "src": "22876:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "id": 1071,
                              "name": "distributorAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1050,
                              "src": "22892:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1066,
                            "name": "_distributeETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1636,
                            "src": "22824:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_uint32_$_t_address_$returns$__$",
                              "typeString": "function (address,address[] memory,uint32[] memory,uint32,address)"
                            }
                          },
                          "id": 1072,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22824:87:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1073,
                        "nodeType": "ExpressionStatement",
                        "src": "22824:87:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1038,
                    "nodeType": "StructuredDocumentation",
                    "src": "21748:622:2",
                    "text": "@notice Distributes the ETH balance for split `split`\n  @dev `accounts`, `percentAllocations`, and `distributorFee` are verified by hashing\n  & comparing to the hash in storage associated with split `split`\n  @param split Address of split to distribute balance for\n  @param accounts Ordered, unique list of addresses with ownership in the split\n  @param percentAllocations Percent allocations associated with each address\n  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n  @param distributorAddress Address to pay `distributorFee` to"
                  },
                  "functionSelector": "e61cb05e",
                  "id": 1075,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 1054,
                          "name": "accounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1043,
                          "src": "22606:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        {
                          "id": 1055,
                          "name": "percentAllocations",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1046,
                          "src": "22616:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                            "typeString": "uint32[] calldata"
                          }
                        },
                        {
                          "id": 1056,
                          "name": "distributorFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1048,
                          "src": "22636:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        }
                      ],
                      "id": 1057,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1053,
                        "name": "validSplit",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 735,
                        "src": "22595:10:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "22595:56:2"
                    }
                  ],
                  "name": "distributeETH",
                  "nameLocation": "22384:13:2",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1052,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "22586:8:2"
                  },
                  "parameters": {
                    "id": 1051,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1040,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "22415:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1075,
                        "src": "22407:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1039,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "22407:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1043,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "22449:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1075,
                        "src": "22430:27:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1041,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "22430:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 1042,
                          "nodeType": "ArrayTypeName",
                          "src": "22430:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1046,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "22485:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1075,
                        "src": "22467:36:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1044,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "22467:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 1045,
                          "nodeType": "ArrayTypeName",
                          "src": "22467:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1048,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "22520:14:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1075,
                        "src": "22513:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 1047,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "22513:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1050,
                        "mutability": "mutable",
                        "name": "distributorAddress",
                        "nameLocation": "22552:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1075,
                        "src": "22544:26:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1049,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "22544:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "22397:179:2"
                  },
                  "returnParameters": {
                    "id": 1058,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "22652:0:2"
                  },
                  "scope": 1875,
                  "src": "22375:543:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2077
                  ],
                  "body": {
                    "id": 1115,
                    "nodeType": "Block",
                    "src": "23755:273:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1101,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1078,
                              "src": "23778:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1102,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1081,
                              "src": "23785:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            {
                              "id": 1103,
                              "name": "percentAllocations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1084,
                              "src": "23795:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              }
                            },
                            {
                              "id": 1104,
                              "name": "distributorFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1086,
                              "src": "23815:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 1100,
                            "name": "_updateSplit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1466,
                            "src": "23765:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_address_$dyn_calldata_ptr_$_t_array$_t_uint32_$dyn_calldata_ptr_$_t_uint32_$returns$__$",
                              "typeString": "function (address,address[] calldata,uint32[] calldata,uint32)"
                            }
                          },
                          "id": 1105,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23765:65:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1106,
                        "nodeType": "ExpressionStatement",
                        "src": "23765:65:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1108,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1078,
                              "src": "23949:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1109,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1081,
                              "src": "23956:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            {
                              "id": 1110,
                              "name": "percentAllocations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1084,
                              "src": "23966:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              }
                            },
                            {
                              "id": 1111,
                              "name": "distributorFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1086,
                              "src": "23986:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "id": 1112,
                              "name": "distributorAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1088,
                              "src": "24002:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1107,
                            "name": "_distributeETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1636,
                            "src": "23934:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_uint32_$_t_address_$returns$__$",
                              "typeString": "function (address,address[] memory,uint32[] memory,uint32,address)"
                            }
                          },
                          "id": 1113,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23934:87:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1114,
                        "nodeType": "ExpressionStatement",
                        "src": "23934:87:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1076,
                    "nodeType": "StructuredDocumentation",
                    "src": "22924:513:2",
                    "text": "@notice Updates & distributes the ETH balance for split `split`\n  @dev only callable by SplitController\n  @param split Address of split to distribute balance for\n  @param accounts Ordered, unique list of addresses with ownership in the split\n  @param percentAllocations Percent allocations associated with each address\n  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n  @param distributorAddress Address to pay `distributorFee` to"
                  },
                  "functionSelector": "a5e3909e",
                  "id": 1116,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 1092,
                          "name": "split",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1078,
                          "src": "23691:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 1093,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1091,
                        "name": "onlySplitController",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 599,
                        "src": "23671:19:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "23671:26:2"
                    },
                    {
                      "arguments": [
                        {
                          "id": 1095,
                          "name": "accounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1081,
                          "src": "23709:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        {
                          "id": 1096,
                          "name": "percentAllocations",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1084,
                          "src": "23719:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                            "typeString": "uint32[] calldata"
                          }
                        },
                        {
                          "id": 1097,
                          "name": "distributorFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1086,
                          "src": "23739:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        }
                      ],
                      "id": 1098,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1094,
                        "name": "validSplit",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 735,
                        "src": "23698:10:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "23698:56:2"
                    }
                  ],
                  "name": "updateAndDistributeETH",
                  "nameLocation": "23451:22:2",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1090,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "23662:8:2"
                  },
                  "parameters": {
                    "id": 1089,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1078,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "23491:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1116,
                        "src": "23483:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1077,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "23483:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1081,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "23525:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1116,
                        "src": "23506:27:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1079,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "23506:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 1080,
                          "nodeType": "ArrayTypeName",
                          "src": "23506:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1084,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "23561:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1116,
                        "src": "23543:36:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1082,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "23543:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 1083,
                          "nodeType": "ArrayTypeName",
                          "src": "23543:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1086,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "23596:14:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1116,
                        "src": "23589:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 1085,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "23589:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1088,
                        "mutability": "mutable",
                        "name": "distributorAddress",
                        "nameLocation": "23628:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1116,
                        "src": "23620:26:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1087,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "23620:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "23473:179:2"
                  },
                  "returnParameters": {
                    "id": 1099,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "23755:0:2"
                  },
                  "scope": 1875,
                  "src": "23442:586:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2095
                  ],
                  "body": {
                    "id": 1157,
                    "nodeType": "Block",
                    "src": "25196:275:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1142,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1119,
                              "src": "25306:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1143,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1125,
                              "src": "25313:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            {
                              "id": 1144,
                              "name": "percentAllocations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1128,
                              "src": "25323:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              }
                            },
                            {
                              "id": 1145,
                              "name": "distributorFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1130,
                              "src": "25343:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 1141,
                            "name": "_validSplitHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1500,
                            "src": "25290:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_uint32_$returns$__$",
                              "typeString": "function (address,address[] memory,uint32[] memory,uint32) view"
                            }
                          },
                          "id": 1146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25290:68:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1147,
                        "nodeType": "ExpressionStatement",
                        "src": "25290:68:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1149,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1119,
                              "src": "25385:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1150,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1122,
                              "src": "25392:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$387",
                                "typeString": "contract ERC20"
                              }
                            },
                            {
                              "id": 1151,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1125,
                              "src": "25399:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            {
                              "id": 1152,
                              "name": "percentAllocations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1128,
                              "src": "25409:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              }
                            },
                            {
                              "id": 1153,
                              "name": "distributorFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1130,
                              "src": "25429:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "id": 1154,
                              "name": "distributorAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1132,
                              "src": "25445:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_contract$_ERC20_$387",
                                "typeString": "contract ERC20"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1148,
                            "name": "_distributeERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1796,
                            "src": "25368:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_contract$_ERC20_$387_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_uint32_$_t_address_$returns$__$",
                              "typeString": "function (address,contract ERC20,address[] memory,uint32[] memory,uint32,address)"
                            }
                          },
                          "id": 1155,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25368:96:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1156,
                        "nodeType": "ExpressionStatement",
                        "src": "25368:96:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1117,
                    "nodeType": "StructuredDocumentation",
                    "src": "24034:857:2",
                    "text": "@notice Distributes the ERC20 `token` balance for split `split`\n  @dev `accounts`, `percentAllocations`, and `distributorFee` are verified by hashing\n  & comparing to the hash in storage associated with split `split`\n  @dev pernicious ERC20s may cause overflow in this function inside\n  _scaleAmountByPercentage, but results do not affect ETH & other ERC20 balances\n  @param split Address of split to distribute balance for\n  @param token Address of ERC20 to distribute balance for\n  @param accounts Ordered, unique list of addresses with ownership in the split\n  @param percentAllocations Percent allocations associated with each address\n  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n  @param distributorAddress Address to pay `distributorFee` to"
                  },
                  "functionSelector": "15811302",
                  "id": 1158,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 1136,
                          "name": "accounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1125,
                          "src": "25150:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        {
                          "id": 1137,
                          "name": "percentAllocations",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1128,
                          "src": "25160:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                            "typeString": "uint32[] calldata"
                          }
                        },
                        {
                          "id": 1138,
                          "name": "distributorFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1130,
                          "src": "25180:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        }
                      ],
                      "id": 1139,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1135,
                        "name": "validSplit",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 735,
                        "src": "25139:10:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "25139:56:2"
                    }
                  ],
                  "name": "distributeERC20",
                  "nameLocation": "24905:15:2",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1134,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "25130:8:2"
                  },
                  "parameters": {
                    "id": 1133,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1119,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "24938:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1158,
                        "src": "24930:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1118,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "24930:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1122,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "24959:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1158,
                        "src": "24953:11:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$387",
                          "typeString": "contract ERC20"
                        },
                        "typeName": {
                          "id": 1121,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1120,
                            "name": "ERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 387,
                            "src": "24953:5:2"
                          },
                          "referencedDeclaration": 387,
                          "src": "24953:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$387",
                            "typeString": "contract ERC20"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1125,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "24993:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1158,
                        "src": "24974:27:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1123,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "24974:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 1124,
                          "nodeType": "ArrayTypeName",
                          "src": "24974:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1128,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "25029:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1158,
                        "src": "25011:36:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1126,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "25011:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 1127,
                          "nodeType": "ArrayTypeName",
                          "src": "25011:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1130,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "25064:14:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1158,
                        "src": "25057:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 1129,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "25057:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1132,
                        "mutability": "mutable",
                        "name": "distributorAddress",
                        "nameLocation": "25096:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1158,
                        "src": "25088:26:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1131,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "25088:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "24920:200:2"
                  },
                  "returnParameters": {
                    "id": 1140,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "25196:0:2"
                  },
                  "scope": 1875,
                  "src": "24896:575:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2113
                  ],
                  "body": {
                    "id": 1202,
                    "nodeType": "Block",
                    "src": "26566:282:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1187,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1161,
                              "src": "26589:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1188,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1167,
                              "src": "26596:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            {
                              "id": 1189,
                              "name": "percentAllocations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1170,
                              "src": "26606:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              }
                            },
                            {
                              "id": 1190,
                              "name": "distributorFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1172,
                              "src": "26626:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 1186,
                            "name": "_updateSplit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1466,
                            "src": "26576:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_address_$dyn_calldata_ptr_$_t_array$_t_uint32_$dyn_calldata_ptr_$_t_uint32_$returns$__$",
                              "typeString": "function (address,address[] calldata,uint32[] calldata,uint32)"
                            }
                          },
                          "id": 1191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26576:65:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1192,
                        "nodeType": "ExpressionStatement",
                        "src": "26576:65:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1194,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1161,
                              "src": "26762:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1195,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1164,
                              "src": "26769:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$387",
                                "typeString": "contract ERC20"
                              }
                            },
                            {
                              "id": 1196,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1167,
                              "src": "26776:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            {
                              "id": 1197,
                              "name": "percentAllocations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1170,
                              "src": "26786:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              }
                            },
                            {
                              "id": 1198,
                              "name": "distributorFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1172,
                              "src": "26806:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "id": 1199,
                              "name": "distributorAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1174,
                              "src": "26822:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_contract$_ERC20_$387",
                                "typeString": "contract ERC20"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1193,
                            "name": "_distributeERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1796,
                            "src": "26745:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_contract$_ERC20_$387_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_uint32_$_t_address_$returns$__$",
                              "typeString": "function (address,contract ERC20,address[] memory,uint32[] memory,uint32,address)"
                            }
                          },
                          "id": 1200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26745:96:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1201,
                        "nodeType": "ExpressionStatement",
                        "src": "26745:96:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1159,
                    "nodeType": "StructuredDocumentation",
                    "src": "25477:748:2",
                    "text": "@notice Updates & distributes the ERC20 `token` balance for split `split`\n  @dev only callable by SplitController\n  @dev pernicious ERC20s may cause overflow in this function inside\n  _scaleAmountByPercentage, but results do not affect ETH & other ERC20 balances\n  @param split Address of split to distribute balance for\n  @param token Address of ERC20 to distribute balance for\n  @param accounts Ordered, unique list of addresses with ownership in the split\n  @param percentAllocations Percent allocations associated with each address\n  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n  @param distributorAddress Address to pay `distributorFee` to"
                  },
                  "functionSelector": "77b1e4e9",
                  "id": 1203,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 1178,
                          "name": "split",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1161,
                          "src": "26502:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 1179,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1177,
                        "name": "onlySplitController",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 599,
                        "src": "26482:19:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "26482:26:2"
                    },
                    {
                      "arguments": [
                        {
                          "id": 1181,
                          "name": "accounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1167,
                          "src": "26520:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        {
                          "id": 1182,
                          "name": "percentAllocations",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1170,
                          "src": "26530:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                            "typeString": "uint32[] calldata"
                          }
                        },
                        {
                          "id": 1183,
                          "name": "distributorFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1172,
                          "src": "26550:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        }
                      ],
                      "id": 1184,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1180,
                        "name": "validSplit",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 735,
                        "src": "26509:10:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "26509:56:2"
                    }
                  ],
                  "name": "updateAndDistributeERC20",
                  "nameLocation": "26239:24:2",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1176,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "26473:8:2"
                  },
                  "parameters": {
                    "id": 1175,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1161,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "26281:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1203,
                        "src": "26273:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1160,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "26273:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1164,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "26302:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1203,
                        "src": "26296:11:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$387",
                          "typeString": "contract ERC20"
                        },
                        "typeName": {
                          "id": 1163,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1162,
                            "name": "ERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 387,
                            "src": "26296:5:2"
                          },
                          "referencedDeclaration": 387,
                          "src": "26296:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$387",
                            "typeString": "contract ERC20"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1167,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "26336:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1203,
                        "src": "26317:27:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1165,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "26317:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 1166,
                          "nodeType": "ArrayTypeName",
                          "src": "26317:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1170,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "26372:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1203,
                        "src": "26354:36:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1168,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "26354:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 1169,
                          "nodeType": "ArrayTypeName",
                          "src": "26354:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1172,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "26407:14:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1203,
                        "src": "26400:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 1171,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "26400:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1174,
                        "mutability": "mutable",
                        "name": "distributorAddress",
                        "nameLocation": "26439:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1203,
                        "src": "26431:26:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1173,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "26431:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "26263:200:2"
                  },
                  "returnParameters": {
                    "id": 1185,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "26566:0:2"
                  },
                  "scope": 1875,
                  "src": "26230:618:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2124
                  ],
                  "body": {
                    "id": 1274,
                    "nodeType": "Block",
                    "src": "27225:566:2",
                    "statements": [
                      {
                        "assignments": [
                          1220
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1220,
                            "mutability": "mutable",
                            "name": "tokenAmounts",
                            "nameLocation": "27252:12:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 1274,
                            "src": "27235:29:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 1218,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "27235:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1219,
                              "nodeType": "ArrayTypeName",
                              "src": "27235:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1227,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1224,
                                "name": "tokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1212,
                                "src": "27281:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_contract$_ERC20_$387_$dyn_calldata_ptr",
                                  "typeString": "contract ERC20[] calldata"
                                }
                              },
                              "id": 1225,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "27281:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1223,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "27267:13:2",
                            "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": 1221,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "27271:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1222,
                              "nodeType": "ArrayTypeName",
                              "src": "27271:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            }
                          },
                          "id": 1226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27267:28:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "27235:60:2"
                      },
                      {
                        "assignments": [
                          1229
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1229,
                            "mutability": "mutable",
                            "name": "ethAmount",
                            "nameLocation": "27313:9:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 1274,
                            "src": "27305:17:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1228,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "27305:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1230,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "27305:17:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1233,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1231,
                            "name": "withdrawETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1208,
                            "src": "27336:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1232,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "27351:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "27336:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1241,
                        "nodeType": "IfStatement",
                        "src": "27332:77:2",
                        "trueBody": {
                          "id": 1240,
                          "nodeType": "Block",
                          "src": "27354:55:2",
                          "statements": [
                            {
                              "expression": {
                                "id": 1238,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 1234,
                                  "name": "ethAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1229,
                                  "src": "27368:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 1236,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1206,
                                      "src": "27390:7:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 1235,
                                    "name": "_withdraw",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1837,
                                    "src": "27380:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
                                      "typeString": "function (address) returns (uint256)"
                                    }
                                  },
                                  "id": 1237,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "27380:18:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "27368:30:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1239,
                              "nodeType": "ExpressionStatement",
                              "src": "27368:30:2"
                            }
                          ]
                        }
                      },
                      {
                        "id": 1273,
                        "nodeType": "UncheckedBlock",
                        "src": "27418:367:2",
                        "statements": [
                          {
                            "body": {
                              "id": 1264,
                              "nodeType": "Block",
                              "src": "27549:155:2",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 1262,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "baseExpression": {
                                        "id": 1253,
                                        "name": "tokenAmounts",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1220,
                                        "src": "27637:12:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                          "typeString": "uint256[] memory"
                                        }
                                      },
                                      "id": 1255,
                                      "indexExpression": {
                                        "id": 1254,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1243,
                                        "src": "27650:1:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "27637:15:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "arguments": [
                                        {
                                          "id": 1257,
                                          "name": "account",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1206,
                                          "src": "27670:7:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "baseExpression": {
                                            "id": 1258,
                                            "name": "tokens",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1212,
                                            "src": "27679:6:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_contract$_ERC20_$387_$dyn_calldata_ptr",
                                              "typeString": "contract ERC20[] calldata"
                                            }
                                          },
                                          "id": 1260,
                                          "indexExpression": {
                                            "id": 1259,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1243,
                                            "src": "27686:1:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "27679:9:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_ERC20_$387",
                                            "typeString": "contract ERC20"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_contract$_ERC20_$387",
                                            "typeString": "contract ERC20"
                                          }
                                        ],
                                        "id": 1256,
                                        "name": "_withdrawERC20",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1874,
                                        "src": "27655:14:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_contract$_ERC20_$387_$returns$_t_uint256_$",
                                          "typeString": "function (address,contract ERC20) returns (uint256)"
                                        }
                                      },
                                      "id": 1261,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "27655:34:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "27637:52:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1263,
                                  "nodeType": "ExpressionStatement",
                                  "src": "27637:52:2"
                                }
                              ]
                            },
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1249,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1246,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1243,
                                "src": "27525:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "expression": {
                                  "id": 1247,
                                  "name": "tokens",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1212,
                                  "src": "27529:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_contract$_ERC20_$387_$dyn_calldata_ptr",
                                    "typeString": "contract ERC20[] calldata"
                                  }
                                },
                                "id": 1248,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "27529:13:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "27525:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 1265,
                            "initializationExpression": {
                              "assignments": [
                                1243
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1243,
                                  "mutability": "mutable",
                                  "name": "i",
                                  "nameLocation": "27518:1:2",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1265,
                                  "src": "27510:9:2",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1242,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "27510:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1245,
                              "initialValue": {
                                "hexValue": "30",
                                "id": 1244,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "27522:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "27510:13:2"
                            },
                            "loopExpression": {
                              "expression": {
                                "id": 1251,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": true,
                                "src": "27544:3:2",
                                "subExpression": {
                                  "id": 1250,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1243,
                                  "src": "27546:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1252,
                              "nodeType": "ExpressionStatement",
                              "src": "27544:3:2"
                            },
                            "nodeType": "ForStatement",
                            "src": "27505:199:2"
                          },
                          {
                            "eventCall": {
                              "arguments": [
                                {
                                  "id": 1267,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1206,
                                  "src": "27733:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 1268,
                                  "name": "ethAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1229,
                                  "src": "27742:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 1269,
                                  "name": "tokens",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1212,
                                  "src": "27753:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_contract$_ERC20_$387_$dyn_calldata_ptr",
                                    "typeString": "contract ERC20[] calldata"
                                  }
                                },
                                {
                                  "id": 1270,
                                  "name": "tokenAmounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1220,
                                  "src": "27761:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_contract$_ERC20_$387_$dyn_calldata_ptr",
                                    "typeString": "contract ERC20[] calldata"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                ],
                                "id": 1266,
                                "name": "Withdrawal",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2190,
                                "src": "27722:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_array$_t_contract$_ERC20_$387_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                                  "typeString": "function (address,uint256,contract ERC20[] memory,uint256[] memory)"
                                }
                              },
                              "id": 1271,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "27722:52:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 1272,
                            "nodeType": "EmitStatement",
                            "src": "27717:57:2"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1204,
                    "nodeType": "StructuredDocumentation",
                    "src": "26854:237:2",
                    "text": "@notice Withdraw ETH &/ ERC20 balances for account `account`\n  @param account Address to withdraw on behalf of\n  @param withdrawETH Withdraw all ETH if nonzero\n  @param tokens Addresses of ERC20s to withdraw"
                  },
                  "functionSelector": "6e5f6919",
                  "id": 1275,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdraw",
                  "nameLocation": "27105:8:2",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1214,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "27216:8:2"
                  },
                  "parameters": {
                    "id": 1213,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1206,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "27131:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1275,
                        "src": "27123:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1205,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "27123:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1208,
                        "mutability": "mutable",
                        "name": "withdrawETH",
                        "nameLocation": "27156:11:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1275,
                        "src": "27148:19:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1207,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "27148:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1212,
                        "mutability": "mutable",
                        "name": "tokens",
                        "nameLocation": "27194:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1275,
                        "src": "27177:23:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_ERC20_$387_$dyn_calldata_ptr",
                          "typeString": "contract ERC20[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1210,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                              "id": 1209,
                              "name": "ERC20",
                              "nodeType": "IdentifierPath",
                              "referencedDeclaration": 387,
                              "src": "27177:5:2"
                            },
                            "referencedDeclaration": 387,
                            "src": "27177:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$387",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 1211,
                          "nodeType": "ArrayTypeName",
                          "src": "27177:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_ERC20_$387_$dyn_storage_ptr",
                            "typeString": "contract ERC20[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "27113:93:2"
                  },
                  "returnParameters": {
                    "id": 1215,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "27225:0:2"
                  },
                  "scope": 1875,
                  "src": "27096:695:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 1288,
                    "nodeType": "Block",
                    "src": "28044:42:2",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "baseExpression": {
                              "id": 1283,
                              "name": "splits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 579,
                              "src": "28061:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                              }
                            },
                            "id": 1285,
                            "indexExpression": {
                              "id": 1284,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1278,
                              "src": "28068:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "28061:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Split_$548_storage",
                              "typeString": "struct SplitMain.Split storage ref"
                            }
                          },
                          "id": 1286,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hash",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 543,
                          "src": "28061:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 1282,
                        "id": 1287,
                        "nodeType": "Return",
                        "src": "28054:25:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1276,
                    "nodeType": "StructuredDocumentation",
                    "src": "27839:136:2",
                    "text": "@notice Returns the current hash of split `split`\n  @param split Split to return hash for\n  @return Split's hash"
                  },
                  "functionSelector": "1da0b8fc",
                  "id": 1289,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getHash",
                  "nameLocation": "27989:7:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1279,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1278,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "28005:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1289,
                        "src": "27997:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1277,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "27997:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "27996:15:2"
                  },
                  "returnParameters": {
                    "id": 1282,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1281,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1289,
                        "src": "28035:7:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1280,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "28035:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28034:9:2"
                  },
                  "scope": 1875,
                  "src": "27980:106:2",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 1302,
                    "nodeType": "Block",
                    "src": "28321:48:2",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "baseExpression": {
                              "id": 1297,
                              "name": "splits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 579,
                              "src": "28338:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                              }
                            },
                            "id": 1299,
                            "indexExpression": {
                              "id": 1298,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1292,
                              "src": "28345:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "28338:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Split_$548_storage",
                              "typeString": "struct SplitMain.Split storage ref"
                            }
                          },
                          "id": 1300,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "controller",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 545,
                          "src": "28338:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 1296,
                        "id": 1301,
                        "nodeType": "Return",
                        "src": "28331:31:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1290,
                    "nodeType": "StructuredDocumentation",
                    "src": "28092:154:2",
                    "text": "@notice Returns the current controller of split `split`\n  @param split Split to return controller for\n  @return Split's controller"
                  },
                  "functionSelector": "88c662aa",
                  "id": 1303,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getController",
                  "nameLocation": "28260:13:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1293,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1292,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "28282:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1303,
                        "src": "28274:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1291,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "28274:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28273:15:2"
                  },
                  "returnParameters": {
                    "id": 1296,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1295,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1303,
                        "src": "28312:7:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1294,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "28312:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28311:9:2"
                  },
                  "scope": 1875,
                  "src": "28251:118:2",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 1316,
                    "nodeType": "Block",
                    "src": "28652:60:2",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "baseExpression": {
                              "id": 1311,
                              "name": "splits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 579,
                              "src": "28669:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                              }
                            },
                            "id": 1313,
                            "indexExpression": {
                              "id": 1312,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1306,
                              "src": "28676:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "28669:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Split_$548_storage",
                              "typeString": "struct SplitMain.Split storage ref"
                            }
                          },
                          "id": 1314,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "newPotentialController",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 547,
                          "src": "28669:36:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 1310,
                        "id": 1315,
                        "nodeType": "Return",
                        "src": "28662:43:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1304,
                    "nodeType": "StructuredDocumentation",
                    "src": "28375:190:2",
                    "text": "@notice Returns the current newPotentialController of split `split`\n  @param split Split to return newPotentialController for\n  @return Split's newPotentialController"
                  },
                  "functionSelector": "e10e51d6",
                  "id": 1317,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getNewPotentialController",
                  "nameLocation": "28579:25:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1307,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1306,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "28613:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1317,
                        "src": "28605:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1305,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "28605:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28604:15:2"
                  },
                  "returnParameters": {
                    "id": 1310,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1309,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1317,
                        "src": "28643:7:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1308,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "28643:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28642:9:2"
                  },
                  "scope": 1875,
                  "src": "28570:142:2",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 1341,
                    "nodeType": "Block",
                    "src": "28965:96:2",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 1325,
                              "name": "ethBalances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 565,
                              "src": "28982:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1327,
                            "indexExpression": {
                              "id": 1326,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1320,
                              "src": "28994:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "28982:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "components": [
                              {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "id": 1333,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 1328,
                                        "name": "splits",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 579,
                                        "src": "29006:6:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                          "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                                        }
                                      },
                                      "id": 1330,
                                      "indexExpression": {
                                        "id": 1329,
                                        "name": "account",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1320,
                                        "src": "29013:7:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "29006:15:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Split_$548_storage",
                                        "typeString": "struct SplitMain.Split storage ref"
                                      }
                                    },
                                    "id": 1331,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "hash",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 543,
                                    "src": "29006:20:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "!=",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 1332,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "29030:1:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "29006:25:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "hexValue": "30",
                                  "id": 1336,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29052:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "id": 1337,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "29006:47:2",
                                "trueExpression": {
                                  "expression": {
                                    "id": 1334,
                                    "name": "account",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1320,
                                    "src": "29034:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "id": 1335,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "balance",
                                  "nodeType": "MemberAccess",
                                  "src": "29034:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 1338,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "29005:49:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "28982:72:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1324,
                        "id": 1340,
                        "nodeType": "Return",
                        "src": "28975:79:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1318,
                    "nodeType": "StructuredDocumentation",
                    "src": "28718:170:2",
                    "text": "@notice Returns the current ETH balance of account `account`\n  @param account Account to return ETH balance for\n  @return Account's balance of ETH"
                  },
                  "functionSelector": "3bb66a7b",
                  "id": 1342,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getETHBalance",
                  "nameLocation": "28902:13:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1321,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1320,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "28924:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1342,
                        "src": "28916:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1319,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "28916:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28915:17:2"
                  },
                  "returnParameters": {
                    "id": 1324,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1323,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1342,
                        "src": "28956:7:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1322,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28956:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28955:9:2"
                  },
                  "scope": 1875,
                  "src": "28893:168:2",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 1373,
                    "nodeType": "Block",
                    "src": "29404:114:2",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 1353,
                                "name": "erc20Balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 573,
                                "src": "29421:13:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_contract$_ERC20_$387_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(contract ERC20 => mapping(address => uint256))"
                                }
                              },
                              "id": 1355,
                              "indexExpression": {
                                "id": 1354,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1348,
                                "src": "29435:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$387",
                                  "typeString": "contract ERC20"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "29421:20:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1357,
                            "indexExpression": {
                              "id": 1356,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1345,
                              "src": "29442:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "29421:29:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "components": [
                              {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "id": 1363,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 1358,
                                        "name": "splits",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 579,
                                        "src": "29454:6:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                          "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                                        }
                                      },
                                      "id": 1360,
                                      "indexExpression": {
                                        "id": 1359,
                                        "name": "account",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1345,
                                        "src": "29461:7:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "29454:15:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Split_$548_storage",
                                        "typeString": "struct SplitMain.Split storage ref"
                                      }
                                    },
                                    "id": 1361,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "hash",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 543,
                                    "src": "29454:20:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "!=",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 1362,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "29478:1:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "29454:25:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "hexValue": "30",
                                  "id": 1368,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29509:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "id": 1369,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "29454:56:2",
                                "trueExpression": {
                                  "arguments": [
                                    {
                                      "id": 1366,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1345,
                                      "src": "29498:7:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 1364,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1348,
                                      "src": "29482:5:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ERC20_$387",
                                        "typeString": "contract ERC20"
                                      }
                                    },
                                    "id": 1365,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "balanceOf",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 30,
                                    "src": "29482:15:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                      "typeString": "function (address) view external returns (uint256)"
                                    }
                                  },
                                  "id": 1367,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "29482:24:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 1370,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "29453:58:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29421:90:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1352,
                        "id": 1372,
                        "nodeType": "Return",
                        "src": "29414:97:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1343,
                    "nodeType": "StructuredDocumentation",
                    "src": "29067:245:2",
                    "text": "@notice Returns the ERC20 balance of token `token` for account `account`\n  @param account Account to return ERC20 `token` balance for\n  @param token Token to return balance for\n  @return Account's balance of `token`"
                  },
                  "functionSelector": "c3a8962c",
                  "id": 1374,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getERC20Balance",
                  "nameLocation": "29326:15:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1349,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1345,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "29350:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1374,
                        "src": "29342:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1344,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "29342:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1348,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "29365:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1374,
                        "src": "29359:11:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$387",
                          "typeString": "contract ERC20"
                        },
                        "typeName": {
                          "id": 1347,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1346,
                            "name": "ERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 387,
                            "src": "29359:5:2"
                          },
                          "referencedDeclaration": 387,
                          "src": "29359:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$387",
                            "typeString": "contract ERC20"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "29341:30:2"
                  },
                  "returnParameters": {
                    "id": 1352,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1351,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1374,
                        "src": "29395:7:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1350,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29395:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "29394:9:2"
                  },
                  "scope": 1875,
                  "src": "29317:201:2",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 1407,
                    "nodeType": "Block",
                    "src": "29787:332:2",
                    "statements": [
                      {
                        "assignments": [
                          1384
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1384,
                            "mutability": "mutable",
                            "name": "numbersLength",
                            "nameLocation": "29864:13:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 1407,
                            "src": "29856:21:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1383,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "29856:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1387,
                        "initialValue": {
                          "expression": {
                            "id": 1385,
                            "name": "numbers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1378,
                            "src": "29880:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "id": 1386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "29880:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29856:38:2"
                      },
                      {
                        "body": {
                          "id": 1405,
                          "nodeType": "Block",
                          "src": "29945:168:2",
                          "statements": [
                            {
                              "expression": {
                                "id": 1399,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 1395,
                                  "name": "sum",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1381,
                                  "src": "29959:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "id": 1396,
                                    "name": "numbers",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1378,
                                    "src": "29966:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                      "typeString": "uint32[] memory"
                                    }
                                  },
                                  "id": 1398,
                                  "indexExpression": {
                                    "id": 1397,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1389,
                                    "src": "29974:1:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "29966:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "29959:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 1400,
                              "nodeType": "ExpressionStatement",
                              "src": "29959:17:2"
                            },
                            {
                              "id": 1404,
                              "nodeType": "UncheckedBlock",
                              "src": "29990:113:2",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 1402,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": true,
                                    "src": "30085:3:2",
                                    "subExpression": {
                                      "id": 1401,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1389,
                                      "src": "30087:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1403,
                                  "nodeType": "ExpressionStatement",
                                  "src": "30085:3:2"
                                }
                              ]
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1394,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1392,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1389,
                            "src": "29924:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 1393,
                            "name": "numbersLength",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1384,
                            "src": "29928:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29924:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1406,
                        "initializationExpression": {
                          "assignments": [
                            1389
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 1389,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "29917:1:2",
                              "nodeType": "VariableDeclaration",
                              "scope": 1406,
                              "src": "29909:9:2",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 1388,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "29909:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 1391,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 1390,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "29921:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "29909:13:2"
                        },
                        "nodeType": "ForStatement",
                        "src": "29904:209:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1375,
                    "nodeType": "StructuredDocumentation",
                    "src": "29579:126:2",
                    "text": "@notice Sums array of uint32s\n  @param numbers Array of uint32s to sum\n  @return sum Sum of `numbers`."
                  },
                  "id": 1408,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getSum",
                  "nameLocation": "29719:7:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1379,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1378,
                        "mutability": "mutable",
                        "name": "numbers",
                        "nameLocation": "29743:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1408,
                        "src": "29727:23:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1376,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "29727:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 1377,
                          "nodeType": "ArrayTypeName",
                          "src": "29727:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "29726:25:2"
                  },
                  "returnParameters": {
                    "id": 1382,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1381,
                        "mutability": "mutable",
                        "name": "sum",
                        "nameLocation": "29782:3:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1408,
                        "src": "29775:10:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 1380,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "29775:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "29774:12:2"
                  },
                  "scope": 1875,
                  "src": "29710:409:2",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1431,
                    "nodeType": "Block",
                    "src": "30639:97:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 1425,
                                  "name": "accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1412,
                                  "src": "30683:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                {
                                  "id": 1426,
                                  "name": "percentAllocations",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1415,
                                  "src": "30693:18:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                    "typeString": "uint32[] memory"
                                  }
                                },
                                {
                                  "id": 1427,
                                  "name": "distributorFee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1417,
                                  "src": "30713:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                    "typeString": "uint32[] memory"
                                  },
                                  {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                ],
                                "expression": {
                                  "id": 1423,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "30666:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 1424,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "30666:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 1428,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "30666:62:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1422,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "30656:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 1429,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "30656:73:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 1421,
                        "id": 1430,
                        "nodeType": "Return",
                        "src": "30649:80:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1409,
                    "nodeType": "StructuredDocumentation",
                    "src": "30125:341:2",
                    "text": "@notice Hashes a split\n  @param accounts Ordered, unique list of addresses with ownership in the split\n  @param percentAllocations Percent allocations associated with each address\n  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n  @return computedHash Hash of the split."
                  },
                  "id": 1432,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_hashSplit",
                  "nameLocation": "30480:10:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1418,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1412,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "30517:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1432,
                        "src": "30500:25:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1410,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "30500:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 1411,
                          "nodeType": "ArrayTypeName",
                          "src": "30500:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1415,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "30551:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1432,
                        "src": "30535:34:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1413,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "30535:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 1414,
                          "nodeType": "ArrayTypeName",
                          "src": "30535:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1417,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "30586:14:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1432,
                        "src": "30579:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 1416,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "30579:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30490:116:2"
                  },
                  "returnParameters": {
                    "id": 1421,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1420,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1432,
                        "src": "30630:7:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1419,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "30630:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30629:9:2"
                  },
                  "scope": 1875,
                  "src": "30471:265:2",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1465,
                    "nodeType": "Block",
                    "src": "31396:227:2",
                    "statements": [
                      {
                        "assignments": [
                          1447
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1447,
                            "mutability": "mutable",
                            "name": "splitHash",
                            "nameLocation": "31414:9:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 1465,
                            "src": "31406:17:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 1446,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "31406:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1453,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1449,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1438,
                              "src": "31437:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            {
                              "id": 1450,
                              "name": "percentAllocations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1441,
                              "src": "31447:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              }
                            },
                            {
                              "id": 1451,
                              "name": "distributorFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1443,
                              "src": "31467:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                                "typeString": "uint32[] calldata"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 1448,
                            "name": "_hashSplit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1432,
                            "src": "31426:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_uint32_$returns$_t_bytes32_$",
                              "typeString": "function (address[] memory,uint32[] memory,uint32) pure returns (bytes32)"
                            }
                          },
                          "id": 1452,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31426:56:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "31406:76:2"
                      },
                      {
                        "expression": {
                          "id": 1459,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1454,
                                "name": "splits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 579,
                                "src": "31553:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                  "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                                }
                              },
                              "id": 1456,
                              "indexExpression": {
                                "id": 1455,
                                "name": "split",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1435,
                                "src": "31560:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "31553:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Split_$548_storage",
                                "typeString": "struct SplitMain.Split storage ref"
                              }
                            },
                            "id": 1457,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "hash",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 543,
                            "src": "31553:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1458,
                            "name": "splitHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1447,
                            "src": "31574:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "31553:30:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1460,
                        "nodeType": "ExpressionStatement",
                        "src": "31553:30:2"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 1462,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1435,
                              "src": "31610:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1461,
                            "name": "UpdateSplit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2134,
                            "src": "31598:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 1463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31598:18:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1464,
                        "nodeType": "EmitStatement",
                        "src": "31593:23:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1433,
                    "nodeType": "StructuredDocumentation",
                    "src": "30742:475:2",
                    "text": "@notice Updates an existing split with recipients `accounts` with ownerships `percentAllocations` and a keeper fee for splitting of `distributorFee`\n  @param split Address of mutable split to update\n  @param accounts Ordered, unique list of addresses with ownership in the split\n  @param percentAllocations Percent allocations associated with each address\n  @param distributorFee Keeper fee paid by split to cover gas costs of distribution"
                  },
                  "id": 1466,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateSplit",
                  "nameLocation": "31231:12:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1444,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1435,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "31261:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1466,
                        "src": "31253:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1434,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "31253:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1438,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "31295:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1466,
                        "src": "31276:27:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1436,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "31276:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 1437,
                          "nodeType": "ArrayTypeName",
                          "src": "31276:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1441,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "31331:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1466,
                        "src": "31313:36:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1439,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "31313:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 1440,
                          "nodeType": "ArrayTypeName",
                          "src": "31313:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1443,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "31366:14:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1466,
                        "src": "31359:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 1442,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "31359:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "31243:143:2"
                  },
                  "returnParameters": {
                    "id": 1445,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "31396:0:2"
                  },
                  "scope": 1875,
                  "src": "31222:401:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1499,
                    "nodeType": "Block",
                    "src": "32244:168:2",
                    "statements": [
                      {
                        "assignments": [
                          1481
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1481,
                            "mutability": "mutable",
                            "name": "hash",
                            "nameLocation": "32262:4:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 1499,
                            "src": "32254:12:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 1480,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "32254:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1487,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1483,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1472,
                              "src": "32280:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            {
                              "id": 1484,
                              "name": "percentAllocations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1475,
                              "src": "32290:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                "typeString": "uint32[] memory"
                              }
                            },
                            {
                              "id": 1485,
                              "name": "distributorFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1477,
                              "src": "32310:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                "typeString": "uint32[] memory"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 1482,
                            "name": "_hashSplit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1432,
                            "src": "32269:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_uint32_$returns$_t_bytes32_$",
                              "typeString": "function (address[] memory,uint32[] memory,uint32) pure returns (bytes32)"
                            }
                          },
                          "id": 1486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32269:56:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "32254:71:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 1493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 1488,
                                "name": "splits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 579,
                                "src": "32339:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Split_$548_storage_$",
                                  "typeString": "mapping(address => struct SplitMain.Split storage ref)"
                                }
                              },
                              "id": 1490,
                              "indexExpression": {
                                "id": 1489,
                                "name": "split",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1469,
                                "src": "32346:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "32339:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Split_$548_storage",
                                "typeString": "struct SplitMain.Split storage ref"
                              }
                            },
                            "id": 1491,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "hash",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 543,
                            "src": "32339:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 1492,
                            "name": "hash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1481,
                            "src": "32361:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "32339:26:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1498,
                        "nodeType": "IfStatement",
                        "src": "32335:70:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [
                              {
                                "id": 1495,
                                "name": "hash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1481,
                                "src": "32400:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 1494,
                              "name": "InvalidSplit__InvalidHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 526,
                              "src": "32374:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$__$",
                                "typeString": "function (bytes32) pure"
                              }
                            },
                            "id": 1496,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32374:31:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1497,
                          "nodeType": "RevertStatement",
                          "src": "32367:38:2"
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1467,
                    "nodeType": "StructuredDocumentation",
                    "src": "31629:432:2",
                    "text": "@notice Checks hash from `accounts`, `percentAllocations`, and `distributorFee` against the hash stored for `split`\n  @param split Address of hash to check\n  @param accounts Ordered, unique list of addresses with ownership in the split\n  @param percentAllocations Percent allocations associated with each address\n  @param distributorFee Keeper fee paid by split to cover gas costs of distribution"
                  },
                  "id": 1500,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_validSplitHash",
                  "nameLocation": "32075:15:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1478,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1469,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "32108:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1500,
                        "src": "32100:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1468,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "32100:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1472,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "32140:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1500,
                        "src": "32123:25:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1470,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "32123:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 1471,
                          "nodeType": "ArrayTypeName",
                          "src": "32123:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1475,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "32174:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1500,
                        "src": "32158:34:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1473,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "32158:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 1474,
                          "nodeType": "ArrayTypeName",
                          "src": "32158:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1477,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "32209:14:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1500,
                        "src": "32202:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 1476,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "32202:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "32090:139:2"
                  },
                  "returnParameters": {
                    "id": 1479,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "32244:0:2"
                  },
                  "scope": 1875,
                  "src": "32066:346:2",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1635,
                    "nodeType": "Block",
                    "src": "33188:2395:2",
                    "statements": [
                      {
                        "assignments": [
                          1517
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1517,
                            "mutability": "mutable",
                            "name": "mainBalance",
                            "nameLocation": "33206:11:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 1635,
                            "src": "33198:19:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1516,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "33198:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1521,
                        "initialValue": {
                          "baseExpression": {
                            "id": 1518,
                            "name": "ethBalances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 565,
                            "src": "33220:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1520,
                          "indexExpression": {
                            "id": 1519,
                            "name": "split",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1503,
                            "src": "33232:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "33220:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "33198:40:2"
                      },
                      {
                        "assignments": [
                          1523
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1523,
                            "mutability": "mutable",
                            "name": "proxyBalance",
                            "nameLocation": "33256:12:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 1635,
                            "src": "33248:20:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1522,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "33248:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1526,
                        "initialValue": {
                          "expression": {
                            "id": 1524,
                            "name": "split",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1503,
                            "src": "33271:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 1525,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "src": "33271:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "33248:36:2"
                      },
                      {
                        "assignments": [
                          1528
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1528,
                            "mutability": "mutable",
                            "name": "amountToSplit",
                            "nameLocation": "33381:13:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 1635,
                            "src": "33373:21:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1527,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "33373:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1529,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "33373:21:2"
                      },
                      {
                        "id": 1544,
                        "nodeType": "UncheckedBlock",
                        "src": "33404:219:2",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1532,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1530,
                                "name": "mainBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1517,
                                "src": "33478:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 1531,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "33492:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "33478:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 1537,
                            "nodeType": "IfStatement",
                            "src": "33474:37:2",
                            "trueBody": {
                              "expression": {
                                "id": 1535,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 1533,
                                  "name": "mainBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1517,
                                  "src": "33495:11:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "hexValue": "31",
                                  "id": 1534,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "33510:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "33495:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1536,
                              "nodeType": "ExpressionStatement",
                              "src": "33495:16:2"
                            }
                          },
                          {
                            "expression": {
                              "id": 1542,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 1538,
                                "name": "amountToSplit",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1528,
                                "src": "33570:13:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1541,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1539,
                                  "name": "mainBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1517,
                                  "src": "33586:11:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 1540,
                                  "name": "proxyBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1523,
                                  "src": "33600:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "33586:26:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "33570:42:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1543,
                            "nodeType": "ExpressionStatement",
                            "src": "33570:42:2"
                          }
                        ]
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1545,
                            "name": "mainBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1517,
                            "src": "33636:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1546,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "33650:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "33636:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1554,
                        "nodeType": "IfStatement",
                        "src": "33632:43:2",
                        "trueBody": {
                          "expression": {
                            "id": 1552,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "baseExpression": {
                                "id": 1548,
                                "name": "ethBalances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 565,
                                "src": "33653:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 1550,
                              "indexExpression": {
                                "id": 1549,
                                "name": "split",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1503,
                                "src": "33665:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "33653:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "hexValue": "31",
                              "id": 1551,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "33674:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "33653:22:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1553,
                          "nodeType": "ExpressionStatement",
                          "src": "33653:22:2"
                        }
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 1556,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1503,
                              "src": "33785:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1557,
                              "name": "amountToSplit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1528,
                              "src": "33792:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1558,
                              "name": "distributorAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1513,
                              "src": "33807:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1555,
                            "name": "DistributeETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2164,
                            "src": "33771:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (address,uint256,address)"
                            }
                          },
                          "id": 1559,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33771:55:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1560,
                        "nodeType": "EmitStatement",
                        "src": "33766:60:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "id": 1563,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1561,
                            "name": "distributorFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1511,
                            "src": "33840:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1562,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "33858:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "33840:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1592,
                        "nodeType": "IfStatement",
                        "src": "33836:700:2",
                        "trueBody": {
                          "id": 1591,
                          "nodeType": "Block",
                          "src": "33861:675:2",
                          "statements": [
                            {
                              "assignments": [
                                1565
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1565,
                                  "mutability": "mutable",
                                  "name": "distributorFeeAmount",
                                  "nameLocation": "33942:20:2",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1591,
                                  "src": "33934:28:2",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1564,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "33934:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1570,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 1567,
                                    "name": "amountToSplit",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1528,
                                    "src": "33990:13:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 1568,
                                    "name": "distributorFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1511,
                                    "src": "34005:14:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  ],
                                  "id": 1566,
                                  "name": "_scaleAmountByPercentage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1808,
                                  "src": "33965:24:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1569,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "33965:55:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "33934:86:2"
                            },
                            {
                              "id": 1590,
                              "nodeType": "UncheckedBlock",
                              "src": "34034:492:2",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 1584,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "baseExpression": {
                                        "id": 1571,
                                        "name": "ethBalances",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 565,
                                        "src": "34183:11:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                          "typeString": "mapping(address => uint256)"
                                        }
                                      },
                                      "id": 1582,
                                      "indexExpression": {
                                        "condition": {
                                          "commonType": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          "id": 1577,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 1572,
                                            "name": "distributorAddress",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1513,
                                            "src": "34195:18:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "!=",
                                          "rightExpression": {
                                            "arguments": [
                                              {
                                                "hexValue": "30",
                                                "id": 1575,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "34225:1:2",
                                                "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": 1574,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "34217:7:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_address_$",
                                                "typeString": "type(address)"
                                              },
                                              "typeName": {
                                                "id": 1573,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "34217:7:2",
                                                "typeDescriptions": {}
                                              }
                                            },
                                            "id": 1576,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "34217:10:2",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "src": "34195:32:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "falseExpression": {
                                          "expression": {
                                            "id": 1579,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -15,
                                            "src": "34251:3:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_message",
                                              "typeString": "msg"
                                            }
                                          },
                                          "id": 1580,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "sender",
                                          "nodeType": "MemberAccess",
                                          "src": "34251:10:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "id": 1581,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "Conditional",
                                        "src": "34195:66:2",
                                        "trueExpression": {
                                          "id": 1578,
                                          "name": "distributorAddress",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1513,
                                          "src": "34230:18:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "34183:79:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "id": 1583,
                                      "name": "distributorFeeAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1565,
                                      "src": "34266:20:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "34183:103:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1585,
                                  "nodeType": "ExpressionStatement",
                                  "src": "34183:103:2"
                                },
                                {
                                  "expression": {
                                    "id": 1588,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 1586,
                                      "name": "amountToSplit",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1528,
                                      "src": "34474:13:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "-=",
                                    "rightHandSide": {
                                      "id": 1587,
                                      "name": "distributorFeeAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1565,
                                      "src": "34491:20:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "34474:37:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1589,
                                  "nodeType": "ExpressionStatement",
                                  "src": "34474:37:2"
                                }
                              ]
                            }
                          ]
                        }
                      },
                      {
                        "id": 1623,
                        "nodeType": "UncheckedBlock",
                        "src": "34545:488:2",
                        "statements": [
                          {
                            "assignments": [
                              1594
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 1594,
                                "mutability": "mutable",
                                "name": "accountsLength",
                                "nameLocation": "34733:14:2",
                                "nodeType": "VariableDeclaration",
                                "scope": 1623,
                                "src": "34725:22:2",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1593,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "34725:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 1597,
                            "initialValue": {
                              "expression": {
                                "id": 1595,
                                "name": "accounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1506,
                                "src": "34750:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 1596,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "34750:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "34725:40:2"
                          },
                          {
                            "body": {
                              "id": 1621,
                              "nodeType": "Block",
                              "src": "34824:199:2",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 1619,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "baseExpression": {
                                        "id": 1608,
                                        "name": "ethBalances",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 565,
                                        "src": "34918:11:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                          "typeString": "mapping(address => uint256)"
                                        }
                                      },
                                      "id": 1612,
                                      "indexExpression": {
                                        "baseExpression": {
                                          "id": 1609,
                                          "name": "accounts",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1506,
                                          "src": "34930:8:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                            "typeString": "address[] memory"
                                          }
                                        },
                                        "id": 1611,
                                        "indexExpression": {
                                          "id": 1610,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1599,
                                          "src": "34939:1:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "34930:11:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "34918:24:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "arguments": [
                                        {
                                          "id": 1614,
                                          "name": "amountToSplit",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1528,
                                          "src": "34971:13:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "baseExpression": {
                                            "id": 1615,
                                            "name": "percentAllocations",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1509,
                                            "src": "34986:18:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                              "typeString": "uint32[] memory"
                                            }
                                          },
                                          "id": 1617,
                                          "indexExpression": {
                                            "id": 1616,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1599,
                                            "src": "35005:1:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "34986:21:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint32",
                                            "typeString": "uint32"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint32",
                                            "typeString": "uint32"
                                          }
                                        ],
                                        "id": 1613,
                                        "name": "_scaleAmountByPercentage",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1808,
                                        "src": "34946:24:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 1618,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "34946:62:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "34918:90:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1620,
                                  "nodeType": "ExpressionStatement",
                                  "src": "34918:90:2"
                                }
                              ]
                            },
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1604,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1602,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1599,
                                "src": "34799:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 1603,
                                "name": "accountsLength",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1594,
                                "src": "34803:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "34799:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 1622,
                            "initializationExpression": {
                              "assignments": [
                                1599
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1599,
                                  "mutability": "mutable",
                                  "name": "i",
                                  "nameLocation": "34792:1:2",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1622,
                                  "src": "34784:9:2",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1598,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "34784:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1601,
                              "initialValue": {
                                "hexValue": "30",
                                "id": 1600,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "34796:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "34784:13:2"
                            },
                            "loopExpression": {
                              "expression": {
                                "id": 1606,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": true,
                                "src": "34819:3:2",
                                "subExpression": {
                                  "id": 1605,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1599,
                                  "src": "34821:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1607,
                              "nodeType": "ExpressionStatement",
                              "src": "34819:3:2"
                            },
                            "nodeType": "ForStatement",
                            "src": "34779:244:2"
                          }
                        ]
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1626,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1624,
                            "name": "proxyBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1523,
                            "src": "35512:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1625,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "35527:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "35512:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1634,
                        "nodeType": "IfStatement",
                        "src": "35508:68:2",
                        "trueBody": {
                          "expression": {
                            "arguments": [
                              {
                                "id": 1631,
                                "name": "proxyBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1523,
                                "src": "35563:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 1628,
                                    "name": "split",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1503,
                                    "src": "35542:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1627,
                                  "name": "SplitWallet",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1973,
                                  "src": "35530:11:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SplitWallet_$1973_$",
                                    "typeString": "type(contract SplitWallet)"
                                  }
                                },
                                "id": 1629,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "35530:18:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_SplitWallet_$1973",
                                  "typeString": "contract SplitWallet"
                                }
                              },
                              "id": 1630,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sendETHToMain",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1950,
                              "src": "35530:32:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_payable$_t_uint256_$returns$__$",
                                "typeString": "function (uint256) payable external"
                              }
                            },
                            "id": 1632,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "35530:46:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1633,
                          "nodeType": "ExpressionStatement",
                          "src": "35530:46:2"
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1501,
                    "nodeType": "StructuredDocumentation",
                    "src": "32418:557:2",
                    "text": "@notice Distributes the ETH balance for split `split`\n  @dev `accounts`, `percentAllocations`, and `distributorFee` must be verified before calling\n  @param split Address of split to distribute balance for\n  @param accounts Ordered, unique list of addresses with ownership in the split\n  @param percentAllocations Percent allocations associated with each address\n  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n  @param distributorAddress Address to pay `distributorFee` to"
                  },
                  "id": 1636,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_distributeETH",
                  "nameLocation": "32989:14:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1514,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1503,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "33021:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1636,
                        "src": "33013:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1502,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "33013:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1506,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "33053:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1636,
                        "src": "33036:25:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1504,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "33036:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 1505,
                          "nodeType": "ArrayTypeName",
                          "src": "33036:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1509,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "33087:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1636,
                        "src": "33071:34:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1507,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "33071:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 1508,
                          "nodeType": "ArrayTypeName",
                          "src": "33071:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1511,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "33122:14:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1636,
                        "src": "33115:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 1510,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "33115:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1513,
                        "mutability": "mutable",
                        "name": "distributorAddress",
                        "nameLocation": "33154:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1636,
                        "src": "33146:26:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1512,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "33146:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "33003:175:2"
                  },
                  "returnParameters": {
                    "id": 1515,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "33188:0:2"
                  },
                  "scope": 1875,
                  "src": "32980:2603:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1795,
                    "nodeType": "Block",
                    "src": "36617:2385:2",
                    "statements": [
                      {
                        "assignments": [
                          1656
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1656,
                            "mutability": "mutable",
                            "name": "amountToSplit",
                            "nameLocation": "36635:13:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 1795,
                            "src": "36627:21:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1655,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "36627:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1657,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "36627:21:2"
                      },
                      {
                        "assignments": [
                          1659
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1659,
                            "mutability": "mutable",
                            "name": "mainBalance",
                            "nameLocation": "36666:11:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 1795,
                            "src": "36658:19:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1658,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "36658:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1665,
                        "initialValue": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 1660,
                              "name": "erc20Balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 573,
                              "src": "36680:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_ERC20_$387_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(contract ERC20 => mapping(address => uint256))"
                              }
                            },
                            "id": 1662,
                            "indexExpression": {
                              "id": 1661,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1642,
                              "src": "36694:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$387",
                                "typeString": "contract ERC20"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "36680:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1664,
                          "indexExpression": {
                            "id": 1663,
                            "name": "split",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1639,
                            "src": "36701:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "36680:27:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "36658:49:2"
                      },
                      {
                        "assignments": [
                          1667
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1667,
                            "mutability": "mutable",
                            "name": "proxyBalance",
                            "nameLocation": "36725:12:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 1795,
                            "src": "36717:20:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1666,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "36717:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1672,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1670,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1639,
                              "src": "36756:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 1668,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1642,
                              "src": "36740:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$387",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 1669,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 30,
                            "src": "36740:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 1671,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "36740:22:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "36717:45:2"
                      },
                      {
                        "id": 1696,
                        "nodeType": "UncheckedBlock",
                        "src": "36772:437:2",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1675,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1673,
                                "name": "proxyBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1667,
                                "src": "36933:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 1674,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "36948:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "36933:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 1680,
                            "nodeType": "IfStatement",
                            "src": "36929:39:2",
                            "trueBody": {
                              "expression": {
                                "id": 1678,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 1676,
                                  "name": "proxyBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1667,
                                  "src": "36951:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "hexValue": "31",
                                  "id": 1677,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "36967:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "36951:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1679,
                              "nodeType": "ExpressionStatement",
                              "src": "36951:17:2"
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1683,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1681,
                                "name": "mainBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1659,
                                "src": "37032:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 1682,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "37046:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "37032:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 1689,
                            "nodeType": "IfStatement",
                            "src": "37028:70:2",
                            "trueBody": {
                              "id": 1688,
                              "nodeType": "Block",
                              "src": "37049:49:2",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 1686,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 1684,
                                      "name": "mainBalance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1659,
                                      "src": "37067:11:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "-=",
                                    "rightHandSide": {
                                      "hexValue": "31",
                                      "id": 1685,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "37082:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "37067:16:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1687,
                                  "nodeType": "ExpressionStatement",
                                  "src": "37067:16:2"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "id": 1694,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 1690,
                                "name": "amountToSplit",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1656,
                                "src": "37156:13:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1693,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1691,
                                  "name": "mainBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1659,
                                  "src": "37172:11:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 1692,
                                  "name": "proxyBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1667,
                                  "src": "37186:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "37172:26:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "37156:42:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1695,
                            "nodeType": "ExpressionStatement",
                            "src": "37156:42:2"
                          }
                        ]
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1697,
                            "name": "mainBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1659,
                            "src": "37222:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1698,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "37236:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "37222:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1708,
                        "nodeType": "IfStatement",
                        "src": "37218:52:2",
                        "trueBody": {
                          "expression": {
                            "id": 1706,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "baseExpression": {
                                "baseExpression": {
                                  "id": 1700,
                                  "name": "erc20Balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 573,
                                  "src": "37239:13:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_contract$_ERC20_$387_$_t_mapping$_t_address_$_t_uint256_$_$",
                                    "typeString": "mapping(contract ERC20 => mapping(address => uint256))"
                                  }
                                },
                                "id": 1703,
                                "indexExpression": {
                                  "id": 1701,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1642,
                                  "src": "37253:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$387",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "37239:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 1704,
                              "indexExpression": {
                                "id": 1702,
                                "name": "split",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1639,
                                "src": "37260:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "37239:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "hexValue": "31",
                              "id": 1705,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "37269:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "37239:31:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1707,
                          "nodeType": "ExpressionStatement",
                          "src": "37239:31:2"
                        }
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 1710,
                              "name": "split",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1639,
                              "src": "37382:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1711,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1642,
                              "src": "37389:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$387",
                                "typeString": "contract ERC20"
                              }
                            },
                            {
                              "id": 1712,
                              "name": "amountToSplit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1656,
                              "src": "37396:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1713,
                              "name": "distributorAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1652,
                              "src": "37411:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_contract$_ERC20_$387",
                                "typeString": "contract ERC20"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1709,
                            "name": "DistributeERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2176,
                            "src": "37366:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_ERC20_$387_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (address,contract ERC20,uint256,address)"
                            }
                          },
                          "id": 1714,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37366:64:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1715,
                        "nodeType": "EmitStatement",
                        "src": "37361:69:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "id": 1718,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1716,
                            "name": "distributorFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1650,
                            "src": "37444:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1717,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "37462:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "37444:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1749,
                        "nodeType": "IfStatement",
                        "src": "37440:663:2",
                        "trueBody": {
                          "id": 1748,
                          "nodeType": "Block",
                          "src": "37465:638:2",
                          "statements": [
                            {
                              "assignments": [
                                1720
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1720,
                                  "mutability": "mutable",
                                  "name": "distributorFeeAmount",
                                  "nameLocation": "37546:20:2",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1748,
                                  "src": "37538:28:2",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1719,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "37538:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1725,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 1722,
                                    "name": "amountToSplit",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1656,
                                    "src": "37594:13:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 1723,
                                    "name": "distributorFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1650,
                                    "src": "37609:14:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  ],
                                  "id": 1721,
                                  "name": "_scaleAmountByPercentage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1808,
                                  "src": "37569:24:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1724,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "37569:55:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "37538:86:2"
                            },
                            {
                              "id": 1747,
                              "nodeType": "UncheckedBlock",
                              "src": "37713:380:2",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 1741,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "baseExpression": {
                                        "baseExpression": {
                                          "id": 1726,
                                          "name": "erc20Balances",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 573,
                                          "src": "37783:13:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_contract$_ERC20_$387_$_t_mapping$_t_address_$_t_uint256_$_$",
                                            "typeString": "mapping(contract ERC20 => mapping(address => uint256))"
                                          }
                                        },
                                        "id": 1738,
                                        "indexExpression": {
                                          "id": 1727,
                                          "name": "token",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1642,
                                          "src": "37797:5:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_ERC20_$387",
                                            "typeString": "contract ERC20"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "37783:20:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                          "typeString": "mapping(address => uint256)"
                                        }
                                      },
                                      "id": 1739,
                                      "indexExpression": {
                                        "condition": {
                                          "commonType": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          "id": 1733,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 1728,
                                            "name": "distributorAddress",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1652,
                                            "src": "37825:18:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "!=",
                                          "rightExpression": {
                                            "arguments": [
                                              {
                                                "hexValue": "30",
                                                "id": 1731,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "37855:1:2",
                                                "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": 1730,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "37847:7:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_address_$",
                                                "typeString": "type(address)"
                                              },
                                              "typeName": {
                                                "id": 1729,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "37847:7:2",
                                                "typeDescriptions": {}
                                              }
                                            },
                                            "id": 1732,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "37847:10:2",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "src": "37825:32:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "falseExpression": {
                                          "expression": {
                                            "id": 1735,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -15,
                                            "src": "37881:3:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_message",
                                              "typeString": "msg"
                                            }
                                          },
                                          "id": 1736,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "sender",
                                          "nodeType": "MemberAccess",
                                          "src": "37881:10:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "id": 1737,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "Conditional",
                                        "src": "37825:66:2",
                                        "trueExpression": {
                                          "id": 1734,
                                          "name": "distributorAddress",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1652,
                                          "src": "37860:18:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "37783:126:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "id": 1740,
                                      "name": "distributorFeeAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1720,
                                      "src": "37913:20:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "37783:150:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1742,
                                  "nodeType": "ExpressionStatement",
                                  "src": "37783:150:2"
                                },
                                {
                                  "expression": {
                                    "id": 1745,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 1743,
                                      "name": "amountToSplit",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1656,
                                      "src": "38041:13:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "-=",
                                    "rightHandSide": {
                                      "id": 1744,
                                      "name": "distributorFeeAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1720,
                                      "src": "38058:20:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "38041:37:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1746,
                                  "nodeType": "ExpressionStatement",
                                  "src": "38041:37:2"
                                }
                              ]
                            }
                          ]
                        }
                      },
                      {
                        "id": 1782,
                        "nodeType": "UncheckedBlock",
                        "src": "38233:314:2",
                        "statements": [
                          {
                            "assignments": [
                              1751
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 1751,
                                "mutability": "mutable",
                                "name": "accountsLength",
                                "nameLocation": "38314:14:2",
                                "nodeType": "VariableDeclaration",
                                "scope": 1782,
                                "src": "38306:22:2",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1750,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "38306:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 1754,
                            "initialValue": {
                              "expression": {
                                "id": 1752,
                                "name": "accounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1645,
                                "src": "38331:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 1753,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "38331:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "38306:40:2"
                          },
                          {
                            "body": {
                              "id": 1780,
                              "nodeType": "Block",
                              "src": "38405:132:2",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 1778,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "baseExpression": {
                                        "baseExpression": {
                                          "id": 1765,
                                          "name": "erc20Balances",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 573,
                                          "src": "38423:13:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_contract$_ERC20_$387_$_t_mapping$_t_address_$_t_uint256_$_$",
                                            "typeString": "mapping(contract ERC20 => mapping(address => uint256))"
                                          }
                                        },
                                        "id": 1770,
                                        "indexExpression": {
                                          "id": 1766,
                                          "name": "token",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1642,
                                          "src": "38437:5:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_ERC20_$387",
                                            "typeString": "contract ERC20"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "38423:20:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                          "typeString": "mapping(address => uint256)"
                                        }
                                      },
                                      "id": 1771,
                                      "indexExpression": {
                                        "baseExpression": {
                                          "id": 1767,
                                          "name": "accounts",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1645,
                                          "src": "38444:8:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                            "typeString": "address[] memory"
                                          }
                                        },
                                        "id": 1769,
                                        "indexExpression": {
                                          "id": 1768,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1756,
                                          "src": "38453:1:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "38444:11:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "38423:33:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "arguments": [
                                        {
                                          "id": 1773,
                                          "name": "amountToSplit",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1656,
                                          "src": "38485:13:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "baseExpression": {
                                            "id": 1774,
                                            "name": "percentAllocations",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1648,
                                            "src": "38500:18:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                              "typeString": "uint32[] memory"
                                            }
                                          },
                                          "id": 1776,
                                          "indexExpression": {
                                            "id": 1775,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1756,
                                            "src": "38519:1:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "38500:21:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint32",
                                            "typeString": "uint32"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint32",
                                            "typeString": "uint32"
                                          }
                                        ],
                                        "id": 1772,
                                        "name": "_scaleAmountByPercentage",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1808,
                                        "src": "38460:24:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 1777,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "38460:62:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "38423:99:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1779,
                                  "nodeType": "ExpressionStatement",
                                  "src": "38423:99:2"
                                }
                              ]
                            },
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1761,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1759,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1756,
                                "src": "38380:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 1760,
                                "name": "accountsLength",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1751,
                                "src": "38384:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "38380:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 1781,
                            "initializationExpression": {
                              "assignments": [
                                1756
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1756,
                                  "mutability": "mutable",
                                  "name": "i",
                                  "nameLocation": "38373:1:2",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1781,
                                  "src": "38365:9:2",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1755,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "38365:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1758,
                              "initialValue": {
                                "hexValue": "30",
                                "id": 1757,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "38377:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "38365:13:2"
                            },
                            "loopExpression": {
                              "expression": {
                                "id": 1763,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": true,
                                "src": "38400:3:2",
                                "subExpression": {
                                  "id": 1762,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1756,
                                  "src": "38402:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1764,
                              "nodeType": "ExpressionStatement",
                              "src": "38400:3:2"
                            },
                            "nodeType": "ForStatement",
                            "src": "38360:177:2"
                          }
                        ]
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1785,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1783,
                            "name": "proxyBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1667,
                            "src": "38922:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1784,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "38937:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "38922:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1794,
                        "nodeType": "IfStatement",
                        "src": "38918:77:2",
                        "trueBody": {
                          "expression": {
                            "arguments": [
                              {
                                "id": 1790,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1642,
                                "src": "38975:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$387",
                                  "typeString": "contract ERC20"
                                }
                              },
                              {
                                "id": 1791,
                                "name": "proxyBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1667,
                                "src": "38982:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$387",
                                  "typeString": "contract ERC20"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 1787,
                                    "name": "split",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1639,
                                    "src": "38952:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1786,
                                  "name": "SplitWallet",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1973,
                                  "src": "38940:11:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SplitWallet_$1973_$",
                                    "typeString": "type(contract SplitWallet)"
                                  }
                                },
                                "id": 1788,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "38940:18:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_SplitWallet_$1973",
                                  "typeString": "contract SplitWallet"
                                }
                              },
                              "id": 1789,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sendERC20ToMain",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1972,
                              "src": "38940:34:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_payable$_t_contract$_ERC20_$387_$_t_uint256_$returns$__$",
                                "typeString": "function (contract ERC20,uint256) payable external"
                              }
                            },
                            "id": 1792,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "38940:55:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1793,
                          "nodeType": "ExpressionStatement",
                          "src": "38940:55:2"
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1637,
                    "nodeType": "StructuredDocumentation",
                    "src": "35589:792:2",
                    "text": "@notice Distributes the ERC20 `token` balance for split `split`\n  @dev `accounts`, `percentAllocations`, and `distributorFee` must be verified before calling\n  @dev pernicious ERC20s may cause overflow in this function inside\n  _scaleAmountByPercentage, but results do not affect ETH & other ERC20 balances\n  @param split Address of split to distribute balance for\n  @param token Address of ERC20 to distribute balance for\n  @param accounts Ordered, unique list of addresses with ownership in the split\n  @param percentAllocations Percent allocations associated with each address\n  @param distributorFee Keeper fee paid by split to cover gas costs of distribution\n  @param distributorAddress Address to pay `distributorFee` to"
                  },
                  "id": 1796,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_distributeERC20",
                  "nameLocation": "36395:16:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1653,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1639,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "36429:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1796,
                        "src": "36421:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1638,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "36421:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1642,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "36450:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1796,
                        "src": "36444:11:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$387",
                          "typeString": "contract ERC20"
                        },
                        "typeName": {
                          "id": 1641,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1640,
                            "name": "ERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 387,
                            "src": "36444:5:2"
                          },
                          "referencedDeclaration": 387,
                          "src": "36444:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$387",
                            "typeString": "contract ERC20"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1645,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "36482:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1796,
                        "src": "36465:25:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1643,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "36465:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 1644,
                          "nodeType": "ArrayTypeName",
                          "src": "36465:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1648,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "36516:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1796,
                        "src": "36500:34:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1646,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "36500:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 1647,
                          "nodeType": "ArrayTypeName",
                          "src": "36500:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1650,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "36551:14:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1796,
                        "src": "36544:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 1649,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "36544:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1652,
                        "mutability": "mutable",
                        "name": "distributorAddress",
                        "nameLocation": "36583:18:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1796,
                        "src": "36575:26:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1651,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "36575:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "36411:196:2"
                  },
                  "returnParameters": {
                    "id": 1654,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "36617:0:2"
                  },
                  "scope": 1875,
                  "src": "36386:2616:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1807,
                    "nodeType": "Block",
                    "src": "39394:447:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "39703:132:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "39760:65:2",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "amount",
                                        "nodeType": "YulIdentifier",
                                        "src": "39784:6:2"
                                      },
                                      {
                                        "name": "scaledPercent",
                                        "nodeType": "YulIdentifier",
                                        "src": "39792:13:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "39780:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "39780:26:2"
                                  },
                                  {
                                    "name": "PERCENTAGE_SCALE",
                                    "nodeType": "YulIdentifier",
                                    "src": "39808:16:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "39776:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "39776:49:2"
                              },
                              "variableNames": [
                                {
                                  "name": "scaledAmount",
                                  "nodeType": "YulIdentifier",
                                  "src": "39760:12:2"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 552,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "39808:16:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1799,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "39784:6:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1804,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "39760:12:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1801,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "39792:13:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1806,
                        "nodeType": "InlineAssembly",
                        "src": "39694:141:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1797,
                    "nodeType": "StructuredDocumentation",
                    "src": "39008:235:2",
                    "text": "@notice Multiplies an amount by a scaled percentage\n  @param amount Amount to get `scaledPercentage` of\n  @param scaledPercent Percent scaled by PERCENTAGE_SCALE\n  @return scaledAmount Percent of `amount`."
                  },
                  "id": 1808,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_scaleAmountByPercentage",
                  "nameLocation": "39257:24:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1802,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1799,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "39290:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1808,
                        "src": "39282:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1798,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "39282:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1801,
                        "mutability": "mutable",
                        "name": "scaledPercent",
                        "nameLocation": "39306:13:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1808,
                        "src": "39298:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1800,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "39298:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "39281:39:2"
                  },
                  "returnParameters": {
                    "id": 1805,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1804,
                        "mutability": "mutable",
                        "name": "scaledAmount",
                        "nameLocation": "39376:12:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1808,
                        "src": "39368:20:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1803,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "39368:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "39367:22:2"
                  },
                  "scope": 1875,
                  "src": "39248:593:2",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1836,
                    "nodeType": "Block",
                    "src": "40081:220:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 1822,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1816,
                            "name": "withdrawn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1814,
                            "src": "40180:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1821,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "baseExpression": {
                                "id": 1817,
                                "name": "ethBalances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 565,
                                "src": "40192:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 1819,
                              "indexExpression": {
                                "id": 1818,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1811,
                                "src": "40204:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "40192:20:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 1820,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "40215:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "40192:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "40180:36:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1823,
                        "nodeType": "ExpressionStatement",
                        "src": "40180:36:2"
                      },
                      {
                        "expression": {
                          "id": 1828,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1824,
                              "name": "ethBalances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 565,
                              "src": "40226:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1826,
                            "indexExpression": {
                              "id": 1825,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1811,
                              "src": "40238:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "40226:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "31",
                            "id": 1827,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "40249:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "40226:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1829,
                        "nodeType": "ExpressionStatement",
                        "src": "40226:24:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1833,
                              "name": "withdrawn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1814,
                              "src": "40284:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 1830,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1811,
                              "src": "40260:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 1832,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransferETH",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 409,
                            "src": "40260:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$bound_to$_t_address_$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1834,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "40260:34:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1835,
                        "nodeType": "ExpressionStatement",
                        "src": "40260:34:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1809,
                    "nodeType": "StructuredDocumentation",
                    "src": "39847:156:2",
                    "text": "@notice Withdraw ETH for account `account`\n  @param account Account to withdrawn ETH for\n  @return withdrawn Amount of ETH withdrawn"
                  },
                  "id": 1837,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_withdraw",
                  "nameLocation": "40017:9:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1812,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1811,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "40035:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1837,
                        "src": "40027:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1810,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "40027:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "40026:17:2"
                  },
                  "returnParameters": {
                    "id": 1815,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1814,
                        "mutability": "mutable",
                        "name": "withdrawn",
                        "nameLocation": "40070:9:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1837,
                        "src": "40062:17:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1813,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "40062:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "40061:19:2"
                  },
                  "scope": 1875,
                  "src": "40008:293:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1873,
                    "nodeType": "Block",
                    "src": "40589:244:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 1856,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1848,
                            "name": "withdrawn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1846,
                            "src": "40690:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1855,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "baseExpression": {
                                "baseExpression": {
                                  "id": 1849,
                                  "name": "erc20Balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 573,
                                  "src": "40702:13:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_contract$_ERC20_$387_$_t_mapping$_t_address_$_t_uint256_$_$",
                                    "typeString": "mapping(contract ERC20 => mapping(address => uint256))"
                                  }
                                },
                                "id": 1851,
                                "indexExpression": {
                                  "id": 1850,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1843,
                                  "src": "40716:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$387",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "40702:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 1853,
                              "indexExpression": {
                                "id": 1852,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1840,
                                "src": "40723:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "40702:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 1854,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "40734:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "40702:33:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "40690:45:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1857,
                        "nodeType": "ExpressionStatement",
                        "src": "40690:45:2"
                      },
                      {
                        "expression": {
                          "id": 1864,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 1858,
                                "name": "erc20Balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 573,
                                "src": "40745:13:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_contract$_ERC20_$387_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(contract ERC20 => mapping(address => uint256))"
                                }
                              },
                              "id": 1861,
                              "indexExpression": {
                                "id": 1859,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1843,
                                "src": "40759:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$387",
                                  "typeString": "contract ERC20"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "40745:20:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1862,
                            "indexExpression": {
                              "id": 1860,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1840,
                              "src": "40766:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "40745:29:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "31",
                            "id": 1863,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "40777:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "40745:33:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1865,
                        "nodeType": "ExpressionStatement",
                        "src": "40745:33:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1869,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1840,
                              "src": "40807:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1870,
                              "name": "withdrawn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1846,
                              "src": "40816:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 1866,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1843,
                              "src": "40788:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$387",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 1868,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 451,
                            "src": "40788:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$387_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_ERC20_$387_$",
                              "typeString": "function (contract ERC20,address,uint256)"
                            }
                          },
                          "id": 1871,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "40788:38:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1872,
                        "nodeType": "ExpressionStatement",
                        "src": "40788:38:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1838,
                    "nodeType": "StructuredDocumentation",
                    "src": "40307:186:2",
                    "text": "@notice Withdraw ERC20 `token` for account `account`\n  @param account Account to withdrawn ERC20 `token` for\n  @return withdrawn Amount of ERC20 `token` withdrawn"
                  },
                  "id": 1874,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_withdrawERC20",
                  "nameLocation": "40507:14:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1844,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1840,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "40530:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1874,
                        "src": "40522:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1839,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "40522:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1843,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "40545:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1874,
                        "src": "40539:11:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$387",
                          "typeString": "contract ERC20"
                        },
                        "typeName": {
                          "id": 1842,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1841,
                            "name": "ERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 387,
                            "src": "40539:5:2"
                          },
                          "referencedDeclaration": 387,
                          "src": "40539:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$387",
                            "typeString": "contract ERC20"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "40521:30:2"
                  },
                  "returnParameters": {
                    "id": 1847,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1846,
                        "mutability": "mutable",
                        "name": "withdrawn",
                        "nameLocation": "40578:9:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1874,
                        "src": "40570:17:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1845,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "40570:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "40569:19:2"
                  },
                  "scope": 1875,
                  "src": "40498:335:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 1876,
              "src": "12188:28647:2",
              "usedErrors": [
                489,
                494,
                501,
                506,
                511,
                516,
                521,
                526,
                531,
                2196,
                2199
              ]
            }
          ],
          "src": "45:40791:2"
        },
        "id": 2
      },
      "contracts/splits/SplitWallet.sol": {
        "ast": {
          "absolutePath": "contracts/splits/SplitWallet.sol",
          "exportedSymbols": {
            "ERC20": [
              387
            ],
            "ISplitMain": [
              2191
            ],
            "SafeTransferLib": [
              472
            ],
            "SplitWallet": [
              1973
            ],
            "Unauthorized": [
              1886
            ]
          },
          "id": 1974,
          "license": "GPL-3.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1877,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".4"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:3"
            },
            {
              "absolutePath": "contracts/splits/interfaces/ISplitMain.sol",
              "file": "./interfaces/ISplitMain.sol",
              "id": 1879,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1974,
              "sourceUnit": 2192,
              "src": "70:55:3",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1878,
                    "name": "ISplitMain",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2191,
                    "src": "78:10:3",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@rari-capital/solmate/src/tokens/ERC20.sol",
              "file": "@rari-capital/solmate/src/tokens/ERC20.sol",
              "id": 1881,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1974,
              "sourceUnit": 388,
              "src": "126:65:3",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1880,
                    "name": "ERC20",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 387,
                    "src": "134:5:3",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@rari-capital/solmate/src/utils/SafeTransferLib.sol",
              "file": "@rari-capital/solmate/src/utils/SafeTransferLib.sol",
              "id": 1883,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1974,
              "sourceUnit": 473,
              "src": "192:84:3",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1882,
                    "name": "SafeTransferLib",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 472,
                    "src": "200:15:3",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "documentation": {
                "id": 1884,
                "nodeType": "StructuredDocumentation",
                "src": "297:32:3",
                "text": "@notice Unauthorized sender"
              },
              "errorSelector": "82b42900",
              "id": 1886,
              "name": "Unauthorized",
              "nameLocation": "335:12:3",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1885,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "347:2:3"
              },
              "src": "329:21:3"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "SplitWallet",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 1887,
                "nodeType": "StructuredDocumentation",
                "src": "352:214:3",
                "text": " @title SplitWallet\n @author 0xSplits <will@0xSplits.xyz>\n @notice The implementation logic for `SplitProxy`.\n @dev `SplitProxy` handles `receive()` itself to avoid the gas cost with `DELEGATECALL`."
              },
              "fullyImplemented": true,
              "id": 1973,
              "linearizedBaseContracts": [
                1973
              ],
              "name": "SplitWallet",
              "nameLocation": "576:11:3",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "global": false,
                  "id": 1890,
                  "libraryName": {
                    "id": 1888,
                    "name": "SafeTransferLib",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 472,
                    "src": "600:15:3"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "594:34:3",
                  "typeName": {
                    "id": 1889,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "620:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                },
                {
                  "global": false,
                  "id": 1894,
                  "libraryName": {
                    "id": 1891,
                    "name": "SafeTransferLib",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 472,
                    "src": "639:15:3"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "633:32:3",
                  "typeName": {
                    "id": 1893,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 1892,
                      "name": "ERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 387,
                      "src": "659:5:3"
                    },
                    "referencedDeclaration": 387,
                    "src": "659:5:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$387",
                      "typeString": "contract ERC20"
                    }
                  }
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1895,
                    "nodeType": "StructuredDocumentation",
                    "src": "702:176:3",
                    "text": "@notice emitted after each successful ETH transfer to proxy\n  @param split Address of the split that received ETH\n  @param amount Amount of ETH received"
                  },
                  "eventSelector": "830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b1",
                  "id": 1901,
                  "name": "ReceiveETH",
                  "nameLocation": "889:10:3",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1900,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1897,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "916:5:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1901,
                        "src": "900:21:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1896,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "900:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1899,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "931:6:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1901,
                        "src": "923:14:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1898,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "923:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "899:39:3"
                  },
                  "src": "883:56:3"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 1902,
                    "nodeType": "StructuredDocumentation",
                    "src": "1034:77:3",
                    "text": "@notice address of SplitMain for split distributions & EOA/SC withdrawals"
                  },
                  "functionSelector": "0e769b2b",
                  "id": 1905,
                  "mutability": "immutable",
                  "name": "splitMain",
                  "nameLocation": "1144:9:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 1973,
                  "src": "1116:37:3",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ISplitMain_$2191",
                    "typeString": "contract ISplitMain"
                  },
                  "typeName": {
                    "id": 1904,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 1903,
                      "name": "ISplitMain",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2191,
                      "src": "1116:10:3"
                    },
                    "referencedDeclaration": 2191,
                    "src": "1116:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISplitMain_$2191",
                      "typeString": "contract ISplitMain"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1920,
                    "nodeType": "Block",
                    "src": "1273:87:3",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1914,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 1908,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "1287:3:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 1909,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "1287:10:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 1912,
                                "name": "splitMain",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1905,
                                "src": "1309:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ISplitMain_$2191",
                                  "typeString": "contract ISplitMain"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ISplitMain_$2191",
                                  "typeString": "contract ISplitMain"
                                }
                              ],
                              "id": 1911,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1301:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1910,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1301:7:3",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1913,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1301:18:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1287:32:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1918,
                        "nodeType": "IfStatement",
                        "src": "1283:59:3",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1915,
                              "name": "Unauthorized",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1886,
                              "src": "1328:12:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 1916,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1328:14:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1917,
                          "nodeType": "RevertStatement",
                          "src": "1321:21:3"
                        }
                      },
                      {
                        "id": 1919,
                        "nodeType": "PlaceholderStatement",
                        "src": "1352:1:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1906,
                    "nodeType": "StructuredDocumentation",
                    "src": "1194:49:3",
                    "text": "@notice Reverts if the sender isn't SplitMain"
                  },
                  "id": 1921,
                  "name": "onlySplitMain",
                  "nameLocation": "1257:13:3",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 1907,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1270:2:3"
                  },
                  "src": "1248:112:3",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1932,
                    "nodeType": "Block",
                    "src": "1416:51:3",
                    "statements": [
                      {
                        "expression": {
                          "id": 1930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1925,
                            "name": "splitMain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1905,
                            "src": "1426:9:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ISplitMain_$2191",
                              "typeString": "contract ISplitMain"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 1927,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "1449:3:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 1928,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "1449:10:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 1926,
                              "name": "ISplitMain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2191,
                              "src": "1438:10:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ISplitMain_$2191_$",
                                "typeString": "type(contract ISplitMain)"
                              }
                            },
                            "id": 1929,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1438:22:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ISplitMain_$2191",
                              "typeString": "contract ISplitMain"
                            }
                          },
                          "src": "1426:34:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ISplitMain_$2191",
                            "typeString": "contract ISplitMain"
                          }
                        },
                        "id": 1931,
                        "nodeType": "ExpressionStatement",
                        "src": "1426:34:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1922,
                    "nodeType": "StructuredDocumentation",
                    "src": "1366:30:3",
                    "text": " CONSTRUCTOR"
                  },
                  "id": 1933,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1923,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1413:2:3"
                  },
                  "returnParameters": {
                    "id": 1924,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1416:0:3"
                  },
                  "scope": 1973,
                  "src": "1402:65:3",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1949,
                    "nodeType": "Block",
                    "src": "1850:59:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1946,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1936,
                              "src": "1895:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 1943,
                                  "name": "splitMain",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1905,
                                  "src": "1868:9:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ISplitMain_$2191",
                                    "typeString": "contract ISplitMain"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_ISplitMain_$2191",
                                    "typeString": "contract ISplitMain"
                                  }
                                ],
                                "id": 1942,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1860:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1941,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1860:7:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1944,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1860:18:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 1945,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransferETH",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 409,
                            "src": "1860:34:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$bound_to$_t_address_$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1947,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1860:42:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1948,
                        "nodeType": "ExpressionStatement",
                        "src": "1860:42:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1934,
                    "nodeType": "StructuredDocumentation",
                    "src": "1527:248:3",
                    "text": "@notice Sends amount `amount` of ETH in proxy to SplitMain\n  @dev payable reduces gas cost; no vulnerability to accidentally lock\n  ETH introduced since fn call is restricted to SplitMain\n  @param amount Amount to send"
                  },
                  "functionSelector": "ab0ebff4",
                  "id": 1950,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1939,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1938,
                        "name": "onlySplitMain",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1921,
                        "src": "1836:13:3"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1836:13:3"
                    }
                  ],
                  "name": "sendETHToMain",
                  "nameLocation": "1789:13:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1937,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1936,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "1811:6:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1950,
                        "src": "1803:14:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1935,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1803:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1802:16:3"
                  },
                  "returnParameters": {
                    "id": 1940,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1850:0:3"
                  },
                  "scope": 1973,
                  "src": "1780:129:3",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 1971,
                    "nodeType": "Block",
                    "src": "2298:63:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 1966,
                                  "name": "splitMain",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1905,
                                  "src": "2335:9:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ISplitMain_$2191",
                                    "typeString": "contract ISplitMain"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_ISplitMain_$2191",
                                    "typeString": "contract ISplitMain"
                                  }
                                ],
                                "id": 1965,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2327:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1964,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2327:7:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1967,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2327:18:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1968,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1956,
                              "src": "2347:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 1961,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1954,
                              "src": "2308:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$387",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 1963,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 451,
                            "src": "2308:18:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$387_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_ERC20_$387_$",
                              "typeString": "function (contract ERC20,address,uint256)"
                            }
                          },
                          "id": 1969,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2308:46:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1970,
                        "nodeType": "ExpressionStatement",
                        "src": "2308:46:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1951,
                    "nodeType": "StructuredDocumentation",
                    "src": "1915:293:3",
                    "text": "@notice Sends amount `amount` of ERC20 `token` in proxy to SplitMain\n  @dev payable reduces gas cost; no vulnerability to accidentally lock\n  ETH introduced since fn call is restricted to SplitMain\n  @param token Token to send\n  @param amount Amount to send"
                  },
                  "functionSelector": "7c1f3ffe",
                  "id": 1972,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1959,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1958,
                        "name": "onlySplitMain",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1921,
                        "src": "2284:13:3"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2284:13:3"
                    }
                  ],
                  "name": "sendERC20ToMain",
                  "nameLocation": "2222:15:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1957,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1954,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "2244:5:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1972,
                        "src": "2238:11:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$387",
                          "typeString": "contract ERC20"
                        },
                        "typeName": {
                          "id": 1953,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1952,
                            "name": "ERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 387,
                            "src": "2238:5:3"
                          },
                          "referencedDeclaration": 387,
                          "src": "2238:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$387",
                            "typeString": "contract ERC20"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1956,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "2259:6:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1972,
                        "src": "2251:14:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1955,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2251:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2237:29:3"
                  },
                  "returnParameters": {
                    "id": 1960,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2298:0:3"
                  },
                  "scope": 1973,
                  "src": "2213:148:3",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 1974,
              "src": "567:1796:3",
              "usedErrors": [
                1886
              ]
            }
          ],
          "src": "45:2319:3"
        },
        "id": 3
      },
      "contracts/splits/interfaces/ISplitMain.sol": {
        "ast": {
          "absolutePath": "contracts/splits/interfaces/ISplitMain.sol",
          "exportedSymbols": {
            "ERC20": [
              387
            ],
            "ISplitMain": [
              2191
            ]
          },
          "id": 2192,
          "license": "GPL-3.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1975,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".4"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:4"
            },
            {
              "absolutePath": "@rari-capital/solmate/src/tokens/ERC20.sol",
              "file": "@rari-capital/solmate/src/tokens/ERC20.sol",
              "id": 1977,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2192,
              "sourceUnit": 388,
              "src": "70:65:4",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1976,
                    "name": "ERC20",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 387,
                    "src": "78:5:4",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "ISplitMain",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 1978,
                "nodeType": "StructuredDocumentation",
                "src": "137:68:4",
                "text": " @title ISplitMain\n @author 0xSplits <will@0xSplits.xyz>"
              },
              "fullyImplemented": false,
              "id": 2191,
              "linearizedBaseContracts": [
                2191
              ],
              "name": "ISplitMain",
              "nameLocation": "216:10:4",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 1979,
                    "nodeType": "StructuredDocumentation",
                    "src": "233:28:4",
                    "text": " FUNCTIONS"
                  },
                  "functionSelector": "8117abc1",
                  "id": 1984,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "walletImplementation",
                  "nameLocation": "276:20:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1980,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "296:2:4"
                  },
                  "returnParameters": {
                    "id": 1983,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1982,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1984,
                        "src": "317:7:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1981,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "317:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "316:9:4"
                  },
                  "scope": 2191,
                  "src": "267:59:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "7601f782",
                  "id": 1999,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createSplit",
                  "nameLocation": "341:11:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1995,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1987,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "381:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1999,
                        "src": "362:27:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1985,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "362:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 1986,
                          "nodeType": "ArrayTypeName",
                          "src": "362:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1990,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "417:18:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1999,
                        "src": "399:36:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1988,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "399:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 1989,
                          "nodeType": "ArrayTypeName",
                          "src": "399:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1992,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "452:14:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1999,
                        "src": "445:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 1991,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "445:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1994,
                        "mutability": "mutable",
                        "name": "controller",
                        "nameLocation": "484:10:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1999,
                        "src": "476:18:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1993,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "476:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "352:148:4"
                  },
                  "returnParameters": {
                    "id": 1998,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1997,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1999,
                        "src": "519:7:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1996,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "519:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "518:9:4"
                  },
                  "scope": 2191,
                  "src": "332:196:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "52844dd3",
                  "id": 2012,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "predictImmutableSplitAddress",
                  "nameLocation": "543:28:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2008,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2002,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "600:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2012,
                        "src": "581:27:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2000,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "581:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 2001,
                          "nodeType": "ArrayTypeName",
                          "src": "581:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2005,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "636:18:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2012,
                        "src": "618:36:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2003,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "618:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 2004,
                          "nodeType": "ArrayTypeName",
                          "src": "618:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2007,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "671:14:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2012,
                        "src": "664:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 2006,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "664:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "571:120:4"
                  },
                  "returnParameters": {
                    "id": 2011,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2010,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2012,
                        "src": "715:7:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2009,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "715:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "714:9:4"
                  },
                  "scope": 2191,
                  "src": "534:190:4",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "ecef0ace",
                  "id": 2025,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateSplit",
                  "nameLocation": "739:11:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2023,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2014,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "768:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2025,
                        "src": "760:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2013,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "760:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2017,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "802:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2025,
                        "src": "783:27:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2015,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "783:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 2016,
                          "nodeType": "ArrayTypeName",
                          "src": "783:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2020,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "838:18:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2025,
                        "src": "820:36:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2018,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "820:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 2019,
                          "nodeType": "ArrayTypeName",
                          "src": "820:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2022,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "873:14:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2025,
                        "src": "866:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 2021,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "866:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "750:143:4"
                  },
                  "returnParameters": {
                    "id": 2024,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "902:0:4"
                  },
                  "scope": 2191,
                  "src": "730:173:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "d0e4b2f4",
                  "id": 2032,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferControl",
                  "nameLocation": "918:15:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2030,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2027,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "942:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2032,
                        "src": "934:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2026,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "934:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2029,
                        "mutability": "mutable",
                        "name": "newController",
                        "nameLocation": "957:13:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2032,
                        "src": "949:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2028,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "949:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "933:38:4"
                  },
                  "returnParameters": {
                    "id": 2031,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "980:0:4"
                  },
                  "scope": 2191,
                  "src": "909:72:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "1267c6da",
                  "id": 2037,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "cancelControlTransfer",
                  "nameLocation": "996:21:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2035,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2034,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "1026:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2037,
                        "src": "1018:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2033,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1018:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1017:15:4"
                  },
                  "returnParameters": {
                    "id": 2036,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1041:0:4"
                  },
                  "scope": 2191,
                  "src": "987:55:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "c7de6440",
                  "id": 2042,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "acceptControl",
                  "nameLocation": "1057:13:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2040,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2039,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "1079:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2042,
                        "src": "1071:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2038,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1071:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1070:15:4"
                  },
                  "returnParameters": {
                    "id": 2041,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1094:0:4"
                  },
                  "scope": 2191,
                  "src": "1048:47:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "189cbaa0",
                  "id": 2047,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "makeSplitImmutable",
                  "nameLocation": "1110:18:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2045,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2044,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "1137:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2047,
                        "src": "1129:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2043,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1129:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1128:15:4"
                  },
                  "returnParameters": {
                    "id": 2046,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1152:0:4"
                  },
                  "scope": 2191,
                  "src": "1101:52:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "e61cb05e",
                  "id": 2062,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "distributeETH",
                  "nameLocation": "1168:13:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2060,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2049,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "1199:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2062,
                        "src": "1191:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2048,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1191:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2052,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "1233:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2062,
                        "src": "1214:27:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2050,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1214:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 2051,
                          "nodeType": "ArrayTypeName",
                          "src": "1214:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2055,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "1269:18:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2062,
                        "src": "1251:36:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2053,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "1251:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 2054,
                          "nodeType": "ArrayTypeName",
                          "src": "1251:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2057,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "1304:14:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2062,
                        "src": "1297:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 2056,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1297:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2059,
                        "mutability": "mutable",
                        "name": "distributorAddress",
                        "nameLocation": "1336:18:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2062,
                        "src": "1328:26:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2058,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1328:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1181:179:4"
                  },
                  "returnParameters": {
                    "id": 2061,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1369:0:4"
                  },
                  "scope": 2191,
                  "src": "1159:211:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "a5e3909e",
                  "id": 2077,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateAndDistributeETH",
                  "nameLocation": "1385:22:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2075,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2064,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "1425:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2077,
                        "src": "1417:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2063,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1417:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2067,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "1459:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2077,
                        "src": "1440:27:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2065,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1440:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 2066,
                          "nodeType": "ArrayTypeName",
                          "src": "1440:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2070,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "1495:18:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2077,
                        "src": "1477:36:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2068,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "1477:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 2069,
                          "nodeType": "ArrayTypeName",
                          "src": "1477:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2072,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "1530:14:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2077,
                        "src": "1523:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 2071,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1523:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2074,
                        "mutability": "mutable",
                        "name": "distributorAddress",
                        "nameLocation": "1562:18:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2077,
                        "src": "1554:26:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2073,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1554:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1407:179:4"
                  },
                  "returnParameters": {
                    "id": 2076,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1595:0:4"
                  },
                  "scope": 2191,
                  "src": "1376:220:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "15811302",
                  "id": 2095,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "distributeERC20",
                  "nameLocation": "1611:15:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2093,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2079,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "1644:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2095,
                        "src": "1636:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2078,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1636:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2082,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "1665:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2095,
                        "src": "1659:11:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$387",
                          "typeString": "contract ERC20"
                        },
                        "typeName": {
                          "id": 2081,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 2080,
                            "name": "ERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 387,
                            "src": "1659:5:4"
                          },
                          "referencedDeclaration": 387,
                          "src": "1659:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$387",
                            "typeString": "contract ERC20"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2085,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "1699:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2095,
                        "src": "1680:27:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2083,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1680:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 2084,
                          "nodeType": "ArrayTypeName",
                          "src": "1680:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2088,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "1735:18:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2095,
                        "src": "1717:36:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2086,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "1717:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 2087,
                          "nodeType": "ArrayTypeName",
                          "src": "1717:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2090,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "1770:14:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2095,
                        "src": "1763:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 2089,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1763:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2092,
                        "mutability": "mutable",
                        "name": "distributorAddress",
                        "nameLocation": "1802:18:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2095,
                        "src": "1794:26:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2091,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1794:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1626:200:4"
                  },
                  "returnParameters": {
                    "id": 2094,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1835:0:4"
                  },
                  "scope": 2191,
                  "src": "1602:234:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "77b1e4e9",
                  "id": 2113,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateAndDistributeERC20",
                  "nameLocation": "1851:24:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2111,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2097,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "1893:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2113,
                        "src": "1885:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2096,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1885:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2100,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "1914:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2113,
                        "src": "1908:11:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$387",
                          "typeString": "contract ERC20"
                        },
                        "typeName": {
                          "id": 2099,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 2098,
                            "name": "ERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 387,
                            "src": "1908:5:4"
                          },
                          "referencedDeclaration": 387,
                          "src": "1908:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$387",
                            "typeString": "contract ERC20"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2103,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "1948:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2113,
                        "src": "1929:27:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2101,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1929:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 2102,
                          "nodeType": "ArrayTypeName",
                          "src": "1929:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2106,
                        "mutability": "mutable",
                        "name": "percentAllocations",
                        "nameLocation": "1984:18:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2113,
                        "src": "1966:36:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2104,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "1966:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 2105,
                          "nodeType": "ArrayTypeName",
                          "src": "1966:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2108,
                        "mutability": "mutable",
                        "name": "distributorFee",
                        "nameLocation": "2019:14:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2113,
                        "src": "2012:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 2107,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2012:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2110,
                        "mutability": "mutable",
                        "name": "distributorAddress",
                        "nameLocation": "2051:18:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2113,
                        "src": "2043:26:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2109,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2043:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1875:200:4"
                  },
                  "returnParameters": {
                    "id": 2112,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2084:0:4"
                  },
                  "scope": 2191,
                  "src": "1842:243:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "6e5f6919",
                  "id": 2124,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdraw",
                  "nameLocation": "2100:8:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2122,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2115,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "2126:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2124,
                        "src": "2118:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2114,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2118:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2117,
                        "mutability": "mutable",
                        "name": "withdrawETH",
                        "nameLocation": "2151:11:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2124,
                        "src": "2143:19:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2116,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2143:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2121,
                        "mutability": "mutable",
                        "name": "tokens",
                        "nameLocation": "2189:6:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2124,
                        "src": "2172:23:4",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_ERC20_$387_$dyn_calldata_ptr",
                          "typeString": "contract ERC20[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2119,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                              "id": 2118,
                              "name": "ERC20",
                              "nodeType": "IdentifierPath",
                              "referencedDeclaration": 387,
                              "src": "2172:5:4"
                            },
                            "referencedDeclaration": 387,
                            "src": "2172:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$387",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 2120,
                          "nodeType": "ArrayTypeName",
                          "src": "2172:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_ERC20_$387_$dyn_storage_ptr",
                            "typeString": "contract ERC20[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2108:93:4"
                  },
                  "returnParameters": {
                    "id": 2123,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2210:0:4"
                  },
                  "scope": 2191,
                  "src": "2091:120:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2125,
                    "nodeType": "StructuredDocumentation",
                    "src": "2248:114:4",
                    "text": "@notice emitted after each successful split creation\n  @param split Address of the created split"
                  },
                  "eventSelector": "8d5f9943c664a3edaf4d3eb18cc5e2c45a7d2dc5869be33d33bbc0fff9bc2590",
                  "id": 2129,
                  "name": "CreateSplit",
                  "nameLocation": "2373:11:4",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2128,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2127,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "2401:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2129,
                        "src": "2385:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2126,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2385:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2384:23:4"
                  },
                  "src": "2367:41:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2130,
                    "nodeType": "StructuredDocumentation",
                    "src": "2414:112:4",
                    "text": "@notice emitted after each successful split update\n  @param split Address of the updated split"
                  },
                  "eventSelector": "45e1e99513dd915ac128b94953ca64c6375717ea1894b3114db08cdca51debd2",
                  "id": 2134,
                  "name": "UpdateSplit",
                  "nameLocation": "2537:11:4",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2133,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2132,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "2565:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2134,
                        "src": "2549:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2131,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2549:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2548:23:4"
                  },
                  "src": "2531:41:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2135,
                    "nodeType": "StructuredDocumentation",
                    "src": "2578:234:4",
                    "text": "@notice emitted after each initiated split control transfer\n  @param split Address of the split control transfer was initiated for\n  @param newPotentialController Address of the split's new potential controller"
                  },
                  "eventSelector": "107cf6ea8668d533df1aab5bb8b6315bb0c25f0b6c955558d09368f290668fc7",
                  "id": 2141,
                  "name": "InitiateControlTransfer",
                  "nameLocation": "2823:23:4",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2140,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2137,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "2863:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2141,
                        "src": "2847:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2136,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2847:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2139,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "newPotentialController",
                        "nameLocation": "2886:22:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2141,
                        "src": "2870:38:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2138,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2870:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2846:63:4"
                  },
                  "src": "2817:93:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2142,
                    "nodeType": "StructuredDocumentation",
                    "src": "2916:146:4",
                    "text": "@notice emitted after each canceled split control transfer\n  @param split Address of the split control transfer was canceled for"
                  },
                  "eventSelector": "6c2460a415b84be3720c209fe02f2cad7a6bcba21e8637afe8957b7ec4b6ef87",
                  "id": 2146,
                  "name": "CancelControlTransfer",
                  "nameLocation": "3073:21:4",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2145,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2144,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "3111:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2146,
                        "src": "3095:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2143,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3095:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3094:23:4"
                  },
                  "src": "3067:51:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2147,
                    "nodeType": "StructuredDocumentation",
                    "src": "3124:286:4",
                    "text": "@notice emitted after each successful split control transfer\n  @param split Address of the split control was transferred for\n  @param previousController Address of the split's previous controller\n  @param newController Address of the split's new controller"
                  },
                  "eventSelector": "943d69cf2bbe08a9d44b3c4ce6da17d939d758739370620871ce99a6437866d0",
                  "id": 2155,
                  "name": "ControlTransfer",
                  "nameLocation": "3421:15:4",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2154,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2149,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "3453:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2155,
                        "src": "3437:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2148,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3437:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2151,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "previousController",
                        "nameLocation": "3476:18:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2155,
                        "src": "3460:34:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2150,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3460:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2153,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "newController",
                        "nameLocation": "3512:13:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2155,
                        "src": "3496:29:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2152,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3496:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3436:90:4"
                  },
                  "src": "3415:112:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2156,
                    "nodeType": "StructuredDocumentation",
                    "src": "3533:257:4",
                    "text": "@notice emitted after each successful ETH balance split\n  @param split Address of the split that distributed its balance\n  @param amount Amount of ETH distributed\n  @param distributorAddress Address to credit distributor fee to"
                  },
                  "eventSelector": "87c3ca0a87d9b82033e4bc55e6d30621f8d7e0c9d8ca7988edfde8932787b77b",
                  "id": 2164,
                  "name": "DistributeETH",
                  "nameLocation": "3801:13:4",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2163,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2158,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "3831:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2164,
                        "src": "3815:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2157,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3815:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2160,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "3846:6:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2164,
                        "src": "3838:14:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2159,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3838:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2162,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "distributorAddress",
                        "nameLocation": "3870:18:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2164,
                        "src": "3854:34:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2161,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3854:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3814:75:4"
                  },
                  "src": "3795:95:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2165,
                    "nodeType": "StructuredDocumentation",
                    "src": "3896:311:4",
                    "text": "@notice emitted after each successful ERC20 balance split\n  @param split Address of the split that distributed its balance\n  @param token Address of ERC20 distributed\n  @param amount Amount of ERC20 distributed\n  @param distributorAddress Address to credit distributor fee to"
                  },
                  "eventSelector": "b5ee5dc3d2c31a019bbf2c787e0e9c97971c96aceea1c38c12fc8fd25c536d46",
                  "id": 2176,
                  "name": "DistributeERC20",
                  "nameLocation": "4218:15:4",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2175,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2167,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "split",
                        "nameLocation": "4259:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2176,
                        "src": "4243:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2166,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4243:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2170,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "4288:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2176,
                        "src": "4274:19:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$387",
                          "typeString": "contract ERC20"
                        },
                        "typeName": {
                          "id": 2169,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 2168,
                            "name": "ERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 387,
                            "src": "4274:5:4"
                          },
                          "referencedDeclaration": 387,
                          "src": "4274:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$387",
                            "typeString": "contract ERC20"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2172,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "4311:6:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2176,
                        "src": "4303:14:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2171,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4303:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2174,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "distributorAddress",
                        "nameLocation": "4343:18:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2176,
                        "src": "4327:34:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2173,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4327:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4233:134:4"
                  },
                  "src": "4212:156:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2177,
                    "nodeType": "StructuredDocumentation",
                    "src": "4374:291:4",
                    "text": "@notice emitted after each successful withdrawal\n  @param account Address that funds were withdrawn to\n  @param ethAmount Amount of ETH withdrawn\n  @param tokens Addresses of ERC20s withdrawn\n  @param tokenAmounts Amounts of corresponding ERC20s withdrawn"
                  },
                  "eventSelector": "a9e30bf144f83390a4fe47562a4e16892108102221c674ff538da0b72a83d174",
                  "id": 2190,
                  "name": "Withdrawal",
                  "nameLocation": "4676:10:4",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2189,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2179,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "4703:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2190,
                        "src": "4687:23:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2178,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4687:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2181,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "ethAmount",
                        "nameLocation": "4720:9:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2190,
                        "src": "4712:17:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2180,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4712:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2185,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "tokens",
                        "nameLocation": "4739:6:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2190,
                        "src": "4731:14:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_ERC20_$387_$dyn_memory_ptr",
                          "typeString": "contract ERC20[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2183,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                              "id": 2182,
                              "name": "ERC20",
                              "nodeType": "IdentifierPath",
                              "referencedDeclaration": 387,
                              "src": "4731:5:4"
                            },
                            "referencedDeclaration": 387,
                            "src": "4731:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$387",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 2184,
                          "nodeType": "ArrayTypeName",
                          "src": "4731:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_ERC20_$387_$dyn_storage_ptr",
                            "typeString": "contract ERC20[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2188,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "tokenAmounts",
                        "nameLocation": "4757:12:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2190,
                        "src": "4747:22:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2186,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "4747:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2187,
                          "nodeType": "ArrayTypeName",
                          "src": "4747:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4686:84:4"
                  },
                  "src": "4670:101:4"
                }
              ],
              "scope": 2192,
              "src": "206:4567:4",
              "usedErrors": []
            }
          ],
          "src": "45:4729:4"
        },
        "id": 4
      },
      "contracts/splits/libraries/Clones.sol": {
        "ast": {
          "absolutePath": "contracts/splits/libraries/Clones.sol",
          "exportedSymbols": {
            "Clones": [
              2275
            ],
            "Create2Error": [
              2199
            ],
            "CreateError": [
              2196
            ]
          },
          "id": 2276,
          "license": "GPL-3.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2193,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".4"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:5"
            },
            {
              "documentation": {
                "id": 2194,
                "nodeType": "StructuredDocumentation",
                "src": "70:33:5",
                "text": "@notice create opcode failed"
              },
              "errorSelector": "985da9b0",
              "id": 2196,
              "name": "CreateError",
              "nameLocation": "109:11:5",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 2195,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "120:2:5"
              },
              "src": "103:20:5"
            },
            {
              "documentation": {
                "id": 2197,
                "nodeType": "StructuredDocumentation",
                "src": "124:34:5",
                "text": "@notice create2 opcode failed"
              },
              "errorSelector": "380bbe13",
              "id": 2199,
              "name": "Create2Error",
              "nameLocation": "164:12:5",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 2198,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "176:2:5"
              },
              "src": "158:21:5"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "Clones",
              "contractDependencies": [],
              "contractKind": "library",
              "fullyImplemented": true,
              "id": 2275,
              "linearizedBaseContracts": [
                2275
              ],
              "name": "Clones",
              "nameLocation": "189:6:5",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 2218,
                    "nodeType": "Block",
                    "src": "4016:637:5",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "4035:554:5",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4049:22:5",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4066:4:5",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4060:5:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4060:11:5"
                              },
                              "variables": [
                                {
                                  "name": "ptr",
                                  "nodeType": "YulTypedName",
                                  "src": "4053:3:5",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "ptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "4091:3:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4096:66:5",
                                    "type": "",
                                    "value": "0x3d605d80600a3d3981f336603057343d52307f00000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4084:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4084:79:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4084:79:5"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "4187:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4192:4:5",
                                        "type": "",
                                        "value": "0x13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4183:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4183:14:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4199:66:5",
                                    "type": "",
                                    "value": "0x830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4176:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4176:90:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4176:90:5"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "4290:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4295:4:5",
                                        "type": "",
                                        "value": "0x33"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4286:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4286:14:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4302:66:5",
                                    "type": "",
                                    "value": "0x60203da23d3df35b3d3d3d3d363d3d37363d7300000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4279:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4279:90:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4279:90:5"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "4393:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4398:4:5",
                                        "type": "",
                                        "value": "0x46"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4389:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4389:14:5"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4409:4:5",
                                        "type": "",
                                        "value": "0x60"
                                      },
                                      {
                                        "name": "implementation",
                                        "nodeType": "YulIdentifier",
                                        "src": "4415:14:5"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "4405:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4405:25:5"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4382:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4382:49:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4382:49:5"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "4455:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4460:4:5",
                                        "type": "",
                                        "value": "0x5a"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4451:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4451:14:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4467:66:5",
                                    "type": "",
                                    "value": "0x5af43d3d93803e605b57fd5bf300000000000000000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4444:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4444:90:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4444:90:5"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4547:32:5",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4566:1:5",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "ptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "4569:3:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4574:4:5",
                                    "type": "",
                                    "value": "0x67"
                                  }
                                ],
                                "functionName": {
                                  "name": "create",
                                  "nodeType": "YulIdentifier",
                                  "src": "4559:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4559:20:5"
                              },
                              "variableNames": [
                                {
                                  "name": "instance",
                                  "nodeType": "YulIdentifier",
                                  "src": "4547:8:5"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 2202,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4415:14:5",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2205,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4547:8:5",
                            "valueSize": 1
                          }
                        ],
                        "id": 2207,
                        "nodeType": "InlineAssembly",
                        "src": "4026:563:5"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2213,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2208,
                            "name": "instance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2205,
                            "src": "4602:8:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 2211,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4622:1:5",
                                "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": 2210,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4614:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 2209,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "4614:7:5",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 2212,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4614:10:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4602:22:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2217,
                        "nodeType": "IfStatement",
                        "src": "4598:48:5",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 2214,
                              "name": "CreateError",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2196,
                              "src": "4633:11:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 2215,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4633:13:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 2216,
                          "nodeType": "RevertStatement",
                          "src": "4626:20:5"
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2200,
                    "nodeType": "StructuredDocumentation",
                    "src": "202:3734:5",
                    "text": " @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`\n except when someone calls `receive()` and then it emits an event matching\n `SplitWallet.ReceiveETH(indexed address, amount)`\n Inspired by OZ & 0age's minimal clone implementations based on eip 1167 found at\n https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.0/contracts/proxy/Clones.sol\n and https://medium.com/coinmonks/the-more-minimal-proxy-5756ae08ee48\n This function uses the create2 opcode and a `salt` to deterministically deploy\n the clone. Using the same `implementation` and `salt` multiple time will revert, since\n the clones cannot be deployed twice at the same address.\n init: 0x3d605d80600a3d3981f3\n 3d   returndatasize  0\n 605d push1 0x5d      0x5d 0\n 80   dup1            0x5d 0x5d 0\n 600a push1 0x0a      0x0a 0x5d 0x5d 0\n 3d   returndatasize  0 0x0a 0x5d 0x5d 0\n 39   codecopy        0x5d 0                      destOffset offset length     memory[destOffset:destOffset+length] = address(this).code[offset:offset+length]       copy executing contracts bytecode\n 81   dup2            0 0x5d 0\n f3   return          0                           offset length                return memory[offset:offset+length]                                                   returns from this contract call\n contract: 0x36603057343d52307f830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b160203da23d3df35b3d3d3d3d363d3d37363d73bebebebebebebebebebebebebebebebebebebebe5af43d3d93803e605b57fd5bf3\n     0x000     36       calldatasize      cds\n     0x001     6030     push1 0x30        0x30 cds\n ,=< 0x003     57       jumpi\n |   0x004     34       callvalue         cv\n |   0x005     3d       returndatasize    0 cv\n |   0x006     52       mstore\n |   0x007     30       address           addr\n |   0x008     7f830d.. push32 0x830d..   id addr\n |   0x029     6020     push1 0x20        0x20 id addr\n |   0x02b     3d       returndatasize    0 0x20 id addr\n |   0x02c     a2       log2\n |   0x02d     3d       returndatasize    0\n |   0x02e     3d       returndatasize    0 0\n |   0x02f     f3       return\n `-> 0x030     5b       jumpdest\n     0x031     3d       returndatasize    0\n     0x032     3d       returndatasize    0 0\n     0x033     3d       returndatasize    0 0 0\n     0x034     3d       returndatasize    0 0 0 0\n     0x035     36       calldatasize      cds 0 0 0 0\n     0x036     3d       returndatasize    0 cds 0 0 0 0\n     0x037     3d       returndatasize    0 0 cds 0 0 0 0\n     0x038     37       calldatacopy      0 0 0 0\n     0x039     36       calldatasize      cds 0 0 0 0\n     0x03a     3d       returndatasize    0 cds 0 0 0 0\n     0x03b     73bebe.. push20 0xbebe..   0xbebe 0 cds 0 0 0 0\n     0x050     5a       gas               gas 0xbebe 0 cds 0 0 0 0\n     0x051     f4       delegatecall      suc 0 0\n     0x052     3d       returndatasize    rds suc 0 0\n     0x053     3d       returndatasize    rds rds suc 0 0\n     0x054     93       swap4             0 rds suc 0 rds\n     0x055     80       dup1              0 0 rds suc 0 rds\n     0x056     3e       returndatacopy    suc 0 rds\n     0x057     605b     push1 0x5b        0x5b suc 0 rds\n ,=< 0x059     57       jumpi             0 rds\n |   0x05a     fd       revert\n `-> 0x05b     5b       jumpdest          0 rds\n     0x05c     f3       return"
                  },
                  "id": 2219,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "clone",
                  "nameLocation": "3950:5:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2203,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2202,
                        "mutability": "mutable",
                        "name": "implementation",
                        "nameLocation": "3964:14:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2219,
                        "src": "3956:22:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2201,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3956:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3955:24:5"
                  },
                  "returnParameters": {
                    "id": 2206,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2205,
                        "mutability": "mutable",
                        "name": "instance",
                        "nameLocation": "4006:8:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2219,
                        "src": "3998:16:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2204,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3998:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3997:18:5"
                  },
                  "scope": 2275,
                  "src": "3941:712:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2239,
                    "nodeType": "Block",
                    "src": "4761:645:5",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "4780:561:5",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4794:22:5",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4811:4:5",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4805:5:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4805:11:5"
                              },
                              "variables": [
                                {
                                  "name": "ptr",
                                  "nodeType": "YulTypedName",
                                  "src": "4798:3:5",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "ptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "4836:3:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4841:66:5",
                                    "type": "",
                                    "value": "0x3d605d80600a3d3981f336603057343d52307f00000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4829:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4829:79:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4829:79:5"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "4932:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4937:4:5",
                                        "type": "",
                                        "value": "0x13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4928:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4928:14:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4944:66:5",
                                    "type": "",
                                    "value": "0x830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4921:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4921:90:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4921:90:5"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "5035:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5040:4:5",
                                        "type": "",
                                        "value": "0x33"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5031:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5031:14:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5047:66:5",
                                    "type": "",
                                    "value": "0x60203da23d3df35b3d3d3d3d363d3d37363d7300000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5024:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5024:90:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5024:90:5"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "5138:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5143:4:5",
                                        "type": "",
                                        "value": "0x46"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5134:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5134:14:5"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5154:4:5",
                                        "type": "",
                                        "value": "0x60"
                                      },
                                      {
                                        "name": "implementation",
                                        "nodeType": "YulIdentifier",
                                        "src": "5160:14:5"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "5150:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5150:25:5"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5127:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5127:49:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5127:49:5"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "5200:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5205:4:5",
                                        "type": "",
                                        "value": "0x5a"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5196:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5196:14:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5212:66:5",
                                    "type": "",
                                    "value": "0x5af43d3d93803e605b57fd5bf300000000000000000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5189:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5189:90:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5189:90:5"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5292:39:5",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5312:1:5",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "ptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "5315:3:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5320:4:5",
                                    "type": "",
                                    "value": "0x67"
                                  },
                                  {
                                    "name": "salt",
                                    "nodeType": "YulIdentifier",
                                    "src": "5326:4:5"
                                  }
                                ],
                                "functionName": {
                                  "name": "create2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5304:7:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5304:27:5"
                              },
                              "variableNames": [
                                {
                                  "name": "instance",
                                  "nodeType": "YulIdentifier",
                                  "src": "5292:8:5"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 2221,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5160:14:5",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2226,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5292:8:5",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2223,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5326:4:5",
                            "valueSize": 1
                          }
                        ],
                        "id": 2228,
                        "nodeType": "InlineAssembly",
                        "src": "4771:570:5"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2234,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2229,
                            "name": "instance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2226,
                            "src": "5354:8:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 2232,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5374:1:5",
                                "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": 2231,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5366:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 2230,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "5366:7:5",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 2233,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5366:10:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5354:22:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2238,
                        "nodeType": "IfStatement",
                        "src": "5350:49:5",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 2235,
                              "name": "Create2Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2199,
                              "src": "5385:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 2236,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5385:14:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 2237,
                          "nodeType": "RevertStatement",
                          "src": "5378:21:5"
                        }
                      }
                    ]
                  },
                  "id": 2240,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "cloneDeterministic",
                  "nameLocation": "4668:18:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2224,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2221,
                        "mutability": "mutable",
                        "name": "implementation",
                        "nameLocation": "4695:14:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2240,
                        "src": "4687:22:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2220,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4687:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2223,
                        "mutability": "mutable",
                        "name": "salt",
                        "nameLocation": "4719:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2240,
                        "src": "4711:12:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2222,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4711:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4686:38:5"
                  },
                  "returnParameters": {
                    "id": 2227,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2226,
                        "mutability": "mutable",
                        "name": "instance",
                        "nameLocation": "4751:8:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2240,
                        "src": "4743:16:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2225,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4743:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4742:18:5"
                  },
                  "scope": 2275,
                  "src": "4659:747:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2253,
                    "nodeType": "Block",
                    "src": "5681:745:5",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5700:720:5",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5714:22:5",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5731:4:5",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5725:5:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5725:11:5"
                              },
                              "variables": [
                                {
                                  "name": "ptr",
                                  "nodeType": "YulTypedName",
                                  "src": "5718:3:5",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "ptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "5756:3:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5761:66:5",
                                    "type": "",
                                    "value": "0x3d605d80600a3d3981f336603057343d52307f00000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5749:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5749:79:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5749:79:5"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "5852:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5857:4:5",
                                        "type": "",
                                        "value": "0x13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5848:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5848:14:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5864:66:5",
                                    "type": "",
                                    "value": "0x830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5841:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5841:90:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5841:90:5"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "5955:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5960:4:5",
                                        "type": "",
                                        "value": "0x33"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5951:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5951:14:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5967:66:5",
                                    "type": "",
                                    "value": "0x60203da23d3df35b3d3d3d3d363d3d37363d7300000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5944:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5944:90:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5944:90:5"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "6058:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6063:4:5",
                                        "type": "",
                                        "value": "0x46"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6054:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6054:14:5"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6074:4:5",
                                        "type": "",
                                        "value": "0x60"
                                      },
                                      {
                                        "name": "implementation",
                                        "nodeType": "YulIdentifier",
                                        "src": "6080:14:5"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6070:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6070:25:5"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6047:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6047:49:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6047:49:5"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "6120:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6125:4:5",
                                        "type": "",
                                        "value": "0x5a"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6116:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6116:14:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6132:66:5",
                                    "type": "",
                                    "value": "0x5af43d3d93803e605b57fd5bf3ff000000000000000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6109:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6109:90:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6109:90:5"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "6223:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6228:4:5",
                                        "type": "",
                                        "value": "0x68"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6219:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6219:14:5"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6239:4:5",
                                        "type": "",
                                        "value": "0x60"
                                      },
                                      {
                                        "name": "deployer",
                                        "nodeType": "YulIdentifier",
                                        "src": "6245:8:5"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6235:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6235:19:5"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6212:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6212:43:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6212:43:5"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "6279:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6284:4:5",
                                        "type": "",
                                        "value": "0x7c"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6275:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6275:14:5"
                                  },
                                  {
                                    "name": "salt",
                                    "nodeType": "YulIdentifier",
                                    "src": "6291:4:5"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6268:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6268:28:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6268:28:5"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "6320:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6325:4:5",
                                        "type": "",
                                        "value": "0x9c"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6316:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6316:14:5"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "6342:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6347:4:5",
                                        "type": "",
                                        "value": "0x67"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nodeType": "YulIdentifier",
                                      "src": "6332:9:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6332:20:5"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6309:6:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6309:44:5"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6309:44:5"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6366:44:5",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "6393:3:5"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6398:4:5",
                                        "type": "",
                                        "value": "0x67"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6389:3:5"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6389:14:5"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6405:4:5",
                                    "type": "",
                                    "value": "0x55"
                                  }
                                ],
                                "functionName": {
                                  "name": "keccak256",
                                  "nodeType": "YulIdentifier",
                                  "src": "6379:9:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6379:31:5"
                              },
                              "variableNames": [
                                {
                                  "name": "predicted",
                                  "nodeType": "YulIdentifier",
                                  "src": "6366:9:5"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 2247,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6245:8:5",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2243,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6080:14:5",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2250,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6366:9:5",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2245,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6291:4:5",
                            "valueSize": 1
                          }
                        ],
                        "id": 2252,
                        "nodeType": "InlineAssembly",
                        "src": "5691:729:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2241,
                    "nodeType": "StructuredDocumentation",
                    "src": "5412:99:5",
                    "text": " @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}."
                  },
                  "id": 2254,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "predictDeterministicAddress",
                  "nameLocation": "5525:27:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2248,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2243,
                        "mutability": "mutable",
                        "name": "implementation",
                        "nameLocation": "5570:14:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2254,
                        "src": "5562:22:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2242,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5562:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2245,
                        "mutability": "mutable",
                        "name": "salt",
                        "nameLocation": "5602:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2254,
                        "src": "5594:12:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2244,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5594:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2247,
                        "mutability": "mutable",
                        "name": "deployer",
                        "nameLocation": "5624:8:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2254,
                        "src": "5616:16:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2246,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5616:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5552:86:5"
                  },
                  "returnParameters": {
                    "id": 2251,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2250,
                        "mutability": "mutable",
                        "name": "predicted",
                        "nameLocation": "5670:9:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2254,
                        "src": "5662:17:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2249,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5662:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5661:19:5"
                  },
                  "scope": 2275,
                  "src": "5516:910:5",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2273,
                    "nodeType": "Block",
                    "src": "6681:88:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2265,
                              "name": "implementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2257,
                              "src": "6726:14:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2266,
                              "name": "salt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2259,
                              "src": "6742:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 2269,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "6756:4:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Clones_$2275",
                                    "typeString": "library Clones"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Clones_$2275",
                                    "typeString": "library Clones"
                                  }
                                ],
                                "id": 2268,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6748:7:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 2267,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6748:7:5",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2270,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6748:13:5",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2264,
                            "name": "predictDeterministicAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2254,
                              2274
                            ],
                            "referencedDeclaration": 2254,
                            "src": "6698:27:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_bytes32_$_t_address_$returns$_t_address_$",
                              "typeString": "function (address,bytes32,address) pure returns (address)"
                            }
                          },
                          "id": 2271,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6698:64:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 2263,
                        "id": 2272,
                        "nodeType": "Return",
                        "src": "6691:71:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2255,
                    "nodeType": "StructuredDocumentation",
                    "src": "6432:99:5",
                    "text": " @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}."
                  },
                  "id": 2274,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "predictDeterministicAddress",
                  "nameLocation": "6545:27:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2260,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2257,
                        "mutability": "mutable",
                        "name": "implementation",
                        "nameLocation": "6581:14:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2274,
                        "src": "6573:22:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2256,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6573:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2259,
                        "mutability": "mutable",
                        "name": "salt",
                        "nameLocation": "6605:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2274,
                        "src": "6597:12:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2258,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6597:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6572:38:5"
                  },
                  "returnParameters": {
                    "id": 2263,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2262,
                        "mutability": "mutable",
                        "name": "predicted",
                        "nameLocation": "6666:9:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2274,
                        "src": "6658:17:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2261,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6658:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6657:19:5"
                  },
                  "scope": 2275,
                  "src": "6536:233:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 2276,
              "src": "181:6590:5",
              "usedErrors": []
            }
          ],
          "src": "45:6727:5"
        },
        "id": 5
      }
    }
  }
}
