{
  "contractName": "ERC20Handler",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "bridgeAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "defaultMessageReceiver",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "ContractAddressNotWhitelisted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OptionalMessageCallFailed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "actual",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expected",
          "type": "uint256"
        }
      ],
      "name": "UnexpectedValue",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "_bridgeAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "_defaultMessageReceiver",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "_resourceIDToTokenContractAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "_tokenContractAddressToTokenProperties",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "isWhitelisted",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "isBurnable",
          "type": "bool"
        },
        {
          "components": [
            {
              "internalType": "bool",
              "name": "isSet",
              "type": "bool"
            },
            {
              "internalType": "uint8",
              "name": "externalDecimals",
              "type": "uint8"
            }
          ],
          "internalType": "struct ERCHandlerHelpers.Decimals",
          "name": "decimals",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "defaultDecimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "setBurnable",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "depositor",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "deposit",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "executeProposal",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        }
      ],
      "name": "setResource",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"defaultMessageReceiver\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressNotWhitelisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OptionalMessageCallFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"}],\"name\":\"UnexpectedValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"_bridgeAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_defaultMessageReceiver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"_resourceIDToTokenContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_tokenContractAddressToTokenProperties\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"isWhitelisted\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isBurnable\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"externalDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct ERCHandlerHelpers.Decimals\",\"name\":\"decimals\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"depositor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeProposal\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"setBurnable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"args\",\"type\":\"bytes\"}],\"name\":\"setResource\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"ChainSafe Systems.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"bridgeAddress\":\"Contract address of previously deployed Bridge.\",\"defaultMessageReceiver\":\"Contract address of previously deployed DefaultMessageReceiver.\"}},\"deposit(bytes32,address,bytes)\":{\"details\":\"Depending if the corresponding {tokenAddress} for the parsed {resourceID} is marked true in {_tokenContractAddressToTokenProperties[tokenAddress].isBurnable}, deposited tokens will be burned, if not, they will be locked.\",\"params\":{\"data\":\"Consists of {amount}, {recipient}, {optionalGas}, {optionalMessage}, padded to 32 bytes.\",\"depositor\":\"Address of account making the deposit in the Bridge contract.\",\"resourceID\":\"ResourceID used to find address of token to be used for deposit.\"},\"returns\":{\"_0\":\"32-length byte array with internal bridge amount OR empty byte array if conversion is not needed.\"}},\"executeProposal(bytes32,bytes)\":{\"params\":{\"data\":\"Consists of {amount}, {recipient}, {optionalGas}, {optionalMessage}, padded to 32 bytes.\",\"resourceID\":\"ResourceID to be used when making deposits.\"}},\"setBurnable(address)\":{\"params\":{\"contractAddress\":\"Address of contract to be used when making or executing deposits.\"}},\"setResource(bytes32,address,bytes)\":{\"params\":{\"args\":\"Byte array which is either empty if the token contract decimals are the same as the bridge defaultDecimals, or has a first byte set to the uint8 decimals value of the token contract.\",\"contractAddress\":\"Address of contract to be called when a deposit is made and a deposited is executed.\",\"resourceID\":\"ResourceID to be used when making deposits.\"}},\"withdraw(bytes)\":{\"params\":{\"data\":\"Consists of {tokenAddress}, {recipient}, and {amount} all padded to 32 bytes.\"}}},\"title\":\"Handles ERC20 deposits and deposit executions.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"_resourceIDToTokenContractAddress(bytes32)\":{\"notice\":\"Exposing getter for {_resourceIDToTokenContractAddress}.\"},\"deposit(bytes32,address,bytes)\":{\"notice\":\"A deposit is initiated by making a deposit in the Bridge contract.Data passed into the function should be constructed as follows: amount                             uint256 bytes  0 - 32 destinationRecipientAddress length uint256 bytes 32 - 64 destinationRecipientAddress        bytes   bytes 64 - (64 + len(destinationRecipientAddress)) optionalGas                        uint256 bytes (64 + len(destinationRecipientAddress)) - (96 + len(destinationRecipientAddress)) optionalMessage             length uint256 bytes (96 + len(destinationRecipientAddress)) - (128 + len(destinationRecipientAddress)) optionalMessage                    bytes   bytes (160 + len(destinationRecipientAddress)) - END\"},\"executeProposal(bytes32,bytes)\":{\"notice\":\"Proposal execution should be initiated when a proposal is finalized in the Bridge contract. by a relayer on the deposit's destination chain.Data passed into the function should be constructed as follows: amount                             uint256 bytes  0 - 32 destinationRecipientAddress length uint256 bytes 32 - 64 destinationRecipientAddress        bytes   bytes 64 - (64 + len(destinationRecipientAddress)) optionalGas                        uint256 bytes (64 + len(destinationRecipientAddress)) - (96 + len(destinationRecipientAddress)) optionalMessage             length uint256 bytes (96 + len(destinationRecipientAddress)) - (128 + len(destinationRecipientAddress)) optionalMessage                    bytes   bytes (160 + len(destinationRecipientAddress)) - END\"},\"setBurnable(address)\":{\"notice\":\"First verifies {contractAddress} is whitelisted, then sets {_tokenContractAddressToTokenProperties[contractAddress].isBurnable} to true.\"},\"setResource(bytes32,address,bytes)\":{\"notice\":\"Sets {_resourceIDToContractAddress} with {contractAddress}, {_tokenContractAddressToTokenProperties[tokenAddress].resourceID} with {resourceID} and {_tokenContractAddressToTokenProperties[tokenAddress].isWhitelisted} to true for {contractAddress} in ERCHandlerHelpers contract. Sets decimals value for contractAddress if value is provided in args.\"},\"withdraw(bytes)\":{\"notice\":\"Used to manually release ERC20 tokens from ERC20Safe.Data passed into the function should be constructed as follows: tokenAddress                           address     bytes  0 - 32 recipient                              address     bytes  32 - 64 amount                                 uint        bytes  64 - 96\"}},\"notice\":\"This contract is intended to be used with the Bridge contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/handlers/ERC20Handler.sol\":\"ERC20Handler\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0x4a1a0ba12bf1a33f10d9fe226278cf59675c0b929d29e4da99658a079b27fb84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bda1319db846d6d6f92d8a57a9bdee8bde1dc39aa7546165791692c24dd6f30a\",\"dweb:/ipfs/Qma5oZ7DmbdAjd8mpiW7mx896PDtwsQtCQ2hj9Upf7b7JK\"]},\"@openzeppelin/contracts/access/AccessControlEnumerable.sol\":{\"keccak256\":\"0x13f5e15f2a0650c0b6aaee2ef19e89eaf4870d6e79662d572a393334c1397247\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ee05f28f549a5d6515e152580716b87636ed4bfab9812499a6e3803df88288b\",\"dweb:/ipfs/QmeEnhdwY1t5Y3YU5a4ffzgXuToydH2PNdNxV9W7dEPRQJ\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb2c137c343ef0c4c7ce7b18c1d108afdc9d315a04e48307288d2d05adcbde3a\",\"dweb:/ipfs/QmUxhrAQM3MM3FF5j7AtcXLXguWCJBHJ14BRdVtuoQc8Fh\"]},\"@openzeppelin/contracts/access/IAccessControlEnumerable.sol\":{\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dcc7b09bfa6e18aab262ca372f4a9b1fc82e294b430706a4e1378cf58e6a276\",\"dweb:/ipfs/QmT8oSAcesdctR15HMLhr2a1HRpXymxdjTfdtfTYJcj2N2\"]},\"@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0xe68ed7fb8766ed1e888291f881e36b616037f852b37d96877045319ad298ba87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1d491a2ca79dbf44bc02e876e21a5847a2cbcc011188532ad8662cdc1c134a4e\",\"dweb:/ipfs/QmUQXhSV8ZvHLzfdG89ZNSh1nLrAYyjnNBLznJGwGcwVk8\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xdadd41acb749920eccf40aeaa8d291adf9751399a7343561bad13e7a8d99be0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://12af4ac016f9fdf3be5d15824f4292272aa11f6b2e0192a0f7320f5ad49bbbf0\",\"dweb:/ipfs/QmRXMpdqCgA3TYuYxBodqs5p9jGbnMW6xa2gvjppvq4TWk\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbbc8ac883ac3c0078ce5ad3e288fbb3ffcc8a30c3a98c0fda0114d64fc44fca2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87a7a5d2f6f63f84598af02b8c50ca2df2631cb8ba2453e8d95fcb17e4be9824\",\"dweb:/ipfs/QmR76hqtAcRqoFj33tmNjcWTLrgNsAaakYwnKZ8zoJtKei\"]},\"@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol\":{\"keccak256\":\"0x0d19410453cda55960a818e02bd7c18952a5c8fe7a3036e81f0d599f34487a7b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c0f62d3d5bef22b5ca00cc3903e7de6152cb68d2d22401a463f373cda54c00f\",\"dweb:/ipfs/QmSfzjZux7LC7NW2f7rjCXTHeFMUCWERqDkhpCTBy7kxTe\"]},\"@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol\":{\"keccak256\":\"0x978847fbff92d66d27d8767402a90ba996970b1936b372406aa17f5492bd8dc5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1414cb92779420b50d3e796b47bad6ea800ef1805bc6f9bf35a3ccb4e17db3dc\",\"dweb:/ipfs/QmaMzwYqLiivfaWSgqeaAPboBtJjVD1hSrH48p7ExJZ7DG\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"@openzeppelin/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol\":{\"keccak256\":\"0x2cd54808b851c4db22f459065af0b7a952262741a85a73923e7a660767cd7baa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://750c4a78e953fe92317bba7166afd0a4b7725723e5822ea1b92ffd4e72d2d36b\",\"dweb:/ipfs/QmZNyCSrdYXGQfmB6LkbX8R6y4gGZRNh1d2pJobYBpkaRF\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x32c202bd28995dd20c4347b7c6467a6d3241c74c8ad3edcbb610cd9205916c45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8179c356adb19e70d6b31a1eedc8c5c7f0c00e669e2540f4099e3844c6074d30\",\"dweb:/ipfs/QmWFbivarEobbqhS1go64ootVuHfVohBseerYy9FTEd1W2\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9772845c886f87a3aab315f8d6b68aa599027c20f441b131cd4afaf65b588900\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad2f29a9c17a4f746416c9e254e17671f43c409dbfa6e4d7d76c3e4a83212d31\",\"dweb:/ipfs/QmTqU65L6iu6yqmXKzcNLPioR8etzKPWycpDJCm17ifVdS\"]},\"project:/contracts/ERC20Safe.sol\":{\"keccak256\":\"0xad4cda144873e4b0159b7c60f7edd54ccc5d844d846bcaf7cffa44d829597f61\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://526d71e89833a47920ece8446f5260cd265189e2303606c0a27c320b2b59e0dc\",\"dweb:/ipfs/QmULfek9aZMYJbynCWeQ1UqxxJBLkbxUxoXjMJmdhuZXhs\"]},\"project:/contracts/handlers/DepositDataHelper.sol\":{\"keccak256\":\"0x5e55040d9ff795be686bde6e3bc12beb4d02e7ec23a7f58ec2470d7c8f151e73\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://74d7218ade3b3836184cdadd4ecd6795d8e7296ffbf197078a88a3a25c083001\",\"dweb:/ipfs/QmQ6M2Z32t8KTqtxoctFLZwJYCZ5T29xkmXdF768KdQVPu\"]},\"project:/contracts/handlers/ERC20Handler.sol\":{\"keccak256\":\"0x68fd873adbb53a69e4f1956519bb5fa17579cd737959ee70de1bbd69649a3545\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://c5f38d45bdabc1998354d53deb3e7b48b12aea1d200526996ff70c368c1f1061\",\"dweb:/ipfs/QmQBwyWUKuPeQyZzSx6ek1etvegRKDBMQgExKnSFb6DBEW\"]},\"project:/contracts/handlers/ERCHandlerHelpers.sol\":{\"keccak256\":\"0xd70404586cae33b8ff8d3cc4557a570cd1d05c5ef1aac7af392941bd01430828\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://3bb0e917a0d8bf33de6579f33a258040ee9515584ff840d3755acbb87ed6192f\",\"dweb:/ipfs/Qmcvx29x8c1wGrxAx8h8XQxsNUW9UKdvE76PxKufQv4LHP\"]},\"project:/contracts/interfaces/IERCHandler.sol\":{\"keccak256\":\"0xf360099ea5a64a9ba351b0807e0bf376c432239af1cc314ef2e44b157afe56fd\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://3b05bd76975b1d128c7b1c8ed93cf35c532737b84807605320a41f193c0e00ef\",\"dweb:/ipfs/QmNQLZWyPb2Nd3JmPaDN5rPyvFzcMtuW9xgp8a7hmgPsUo\"]},\"project:/contracts/interfaces/IHandler.sol\":{\"keccak256\":\"0x6ff2c7a2a169c519a9ebd670069c8dc902e09cf9dccd52ce87a110799d3dfd2e\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://73eacb1eaa4de346d24fd3174fb21d2b16f1350b9599813f1bb292eecbce806d\",\"dweb:/ipfs/QmTGT3orocKxkJ3wud312TFB4CSVYJeGiTHGZie8vkNKxM\"]},\"project:/contracts/interfaces/ISygmaMessageReceiver.sol\":{\"keccak256\":\"0xf5ea492be43681bc3c1f105dc0f3ae377661b98bd22dbb6eb64e6c0441ba8a6a\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://73136402e079193251f5626fa11b8d84eab1a3a2ab1061a25e6b32d05ea58171\",\"dweb:/ipfs/QmZLuqEVAZrmMLzsmw3RsJAuowraUCDzFGtPHHuxywBtzS\"]},\"project:/contracts/utils/ExcessivelySafeCall.sol\":{\"keccak256\":\"0x23cd5303d846a87b4e92a79c0ca7e6561c67dd72bd596b34e0ef033f6b460a7a\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://d7d5c6dc689b0ce41d7b3dfa2871ce44d166b71f7f3f6ff9ba3c7cf2dff7a467\",\"dweb:/ipfs/QmNunxaRMDNLzCJxKtUj9QXALJRiwCd3fJ6vRRbu1mdxdj\"]},\"project:/contracts/utils/SanityChecks.sol\":{\"keccak256\":\"0xe0a497950a5f1f9e127a5684c6c562e6fb0fa72dcde056b8c6da933e6bf8afc2\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://47e5918856c922f1408cd15660d451062820121bd1ef3057d1dccad9f9785241\",\"dweb:/ipfs/QmZUEfFPEtiRKnfAUGhN6HoWCyLLUs9XgJbmqEq7pbABHq\"]}},\"version\":1}",
  "bytecode": "0x60c060405234801561001057600080fd5b5060405161163138038061163183398101604081905261002f91610062565b6001600160a01b039182166080521660a052610095565b80516001600160a01b038116811461005d57600080fd5b919050565b6000806040838503121561007557600080fd5b61007e83610046565b915061008c60208401610046565b90509250929050565b60805160a0516115696100c86000396000818161015701526109c8015260008181610130015261061701526115696000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063a2f21f8a11610066578063a2f21f8a14610152578063ac607c2114610179578063b07e54bb1461020e578063e248cff21461022e578063fa8675b01461024157600080fd5b806307b7ed99146100a35780630968f264146100b85780630a6d55d8146100cb57806330f08abd14610111578063318c136e1461012b575b600080fd5b6100b66100b1366004610f8a565b610254565b005b6100b66100c6366004610fbd565b610268565b6100f46100d936600461106e565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610119601281565b60405160ff9091168152602001610108565b6100f47f000000000000000000000000000000000000000000000000000000000000000081565b6100f47f000000000000000000000000000000000000000000000000000000000000000081565b6101d6610187366004610f8a565b600160208181526000928352604092839020805492810154845180860190955260029091015460ff81811615158652610100918290048116938601939093529293828216939091049091169084565b6040805194855292151560208086019190915291151592840192909252815115156060840152015160ff16608082015260a001610108565b61022161021c3660046110d0565b6102b4565b6040516101089190611184565b61022161023c366004611197565b610381565b6100b661024f3660046110d0565b610582565b61025c61060c565b61026581610686565b50565b61027061060c565b60008060008380602001905181019061028991906111e3565b919450925090506102a26001600160a01b0383166106f8565b506102ae838383610725565b50505050565b60606102be61060c565b60006102cc8385018561106e565b600087815260208181526040808320546001600160a01b0316808452600192839052922001549192509060ff16610326576040516325df77c560e11b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b03811660009081526001602081905260409091200154610100900460ff16156103605761035b818784610731565b61036c565b61036c8187308561079d565b61037681836107aa565b979650505050505050565b606061038b61060c565b6000610398858585610898565b80516001600160a01b03166000908152600160208190526040909120015490915060ff166103e75780516040516325df77c560e11b81526001600160a01b03909116600482015260240161031d565b80516001600160a01b031660009081526001602081905260409091200154610100900460ff161561042e57610429816000015182604001518360600151610b16565b610445565b610445816000015182604001518360600151610725565b60028160a00151600281111561045d5761045d611226565b141561046e5760c00151905061057b565b60018160a00151600281111561048657610486611226565b141561052d576000806104c0836080015160006101008660c0015187604001516001600160a01b0316610b4e90949392919063ffffffff16565b91509150811580156104d857506104d681610bd9565b155b156104f657604051632f89bddb60e21b815260040160405180910390fd5b8251604080850151602080870151925161051494939186910161123c565b604051602081830303815290604052935050505061057b565b80516040808301516020808501519251610568949391016001600160a01b039384168152919092166020820152604081019190915260600190565b6040516020818303038152906040529150505b9392505050565b61058a61060c565b61059c836001600160a01b03166106f8565b5060008481526020818152604080832080546001600160a01b0319166001600160a01b03881690811790915583526001918290529091208581558101805461ffff1916909117905580156102ae5760006105f68284611279565b60f81c90506106058482610bf4565b5050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106845760405162461bcd60e51b815260206004820152601e60248201527f73656e646572206d7573742062652062726964676520636f6e74726163740000604482015260640161031d565b565b6001600160a01b0381166000908152600160208190526040909120015460ff166106ce576040516325df77c560e11b81526001600160a01b038216600482015260240161031d565b6001600160a01b0316600090815260016020819052604090912001805461ff001916610100179055565b60006001600160a01b0382166107215760405163d92e233d60e01b815260040160405180910390fd5b5090565b826102ae818484610c9e565b60405163079cc67960e41b81526001600160a01b038381166004830152602482018390528491908216906379cc6790906044015b600060405180830381600087803b15801561077f57600080fd5b505af1158015610793573d6000803e3d6000fd5b5050505050505050565b8361060581858585610d06565b6001600160a01b038216600090815260016020908152604080832081518083019092526002015460ff80821615158084526101009092041692820192909252606092909161080b576040518060200160405280600081525092505050610892565b601260ff16826020015160ff161061084a576012826020015161082e91906112bf565b61083990600a6113c6565b61084390856113d5565b9050610872565b602082015161085a9060126112bf565b61086590600a6113c6565b61086f90856113f7565b90505b604080516020810183905201604051602081830303815290604052925050505b92915050565b6108d86040805160e08101825260008082526020820181905291810182905260608101829052608081018290529060a08201908152602001606081525090565b6000806108e784860186611416565b90925090506108f7816014610d3e565b506000610908605460408789611438565b61091191611462565b60008881526020819052604081205460609290921c92506001600160a01b039091169061093e8286610d71565b90506054600080606081610953856040611495565b8c1115610aaf578c8c8690809261096c93929190611438565b8101906109799190611416565b9094509250610989604086611495565b945060008411801561099b5750600083115b80156109b057508b6109ad8685611495565b11155b15610a5d575060016001600160a01b0388166109ea577f000000000000000000000000000000000000000000000000000000000000000097505b634726ca4360e01b87878f8f8990888b610a049190611495565b92610a1193929190611438565b604051602401610a2494939291906114ad565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529150610aaf565b506040805160048152602481018252602080820180516001600160e01b03166356a6881560e11b1790529151600292610a9d928a928c928f92910161123c565b60405160208183030381529060405291505b6040518060e00160405280886001600160a01b031681526020018b8152602001896001600160a01b03168152602001878152602001858152602001826002811115610afc57610afc611226565b815260200192909252509c9b505050505050505050505050565b6040516340c10f1960e01b81526001600160a01b038381166004830152602482018390528491908216906340c10f1990604401610765565b6000606060008060008661ffff1667ffffffffffffffff811115610b7457610b74610fa7565b6040519080825280601f01601f191660200182016040528015610b9e576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115610bbf578692505b828152826000602083013e90999098509650505050505050565b805160009015610bec5781518083602001fd5b506000919050565b6001600160a01b0382166000908152600160208190526040909120015460ff16610c3c576040516325df77c560e11b81526001600160a01b038316600482015260240161031d565b604080518082018252600180825260ff93841660208084019182526001600160a01b039690961660009081529190955291909120905160029091018054935161ffff1990941691151561ff001916919091176101009390921692909202179055565b6040516001600160a01b038316602482015260448101829052610d0190849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610e23565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526102ae9085906323b872dd60e01b90608401610cca565b6000818314610d6a5760405163c230690360e01b8152600481018490526024810183905260440161031d565b5090919050565b6001600160a01b038216600090815260016020908152604080832081518083019092526002015460ff8082161515808452610100909204169282019290925290610dbe5782915050610892565b601260ff16816020015160ff1610610dfe5760128160200151610de191906112bf565b610dec90600a6113c6565b610df690846113f7565b915050610892565b6020810151610e0e9060126112bf565b610e1990600a6113c6565b610df690846113d5565b813b80610e6a5760405162461bcd60e51b8152602060048201526015602482015274115490cc8c0e881b9bdd08184818dbdb9d1c9858dd605a1b604482015260640161031d565b600080846001600160a01b031684604051610e8591906114f5565b6000604051808303816000865af19150503d8060008114610ec2576040519150601f19603f3d011682016040523d82523d6000602084013e610ec7565b606091505b509150915081610f0e5760405162461bcd60e51b8152602060048201526012602482015271115490cc8c0e8818d85b1b0819985a5b195960721b604482015260640161031d565b8051156106055780806020019051810190610f299190611511565b6106055760405162461bcd60e51b815260206004820181905260248201527f45524332303a206f7065726174696f6e20646964206e6f742073756363656564604482015260640161031d565b6001600160a01b038116811461026557600080fd5b600060208284031215610f9c57600080fd5b813561057b81610f75565b634e487b7160e01b600052604160045260246000fd5b600060208284031215610fcf57600080fd5b813567ffffffffffffffff80821115610fe757600080fd5b818401915084601f830112610ffb57600080fd5b81358181111561100d5761100d610fa7565b604051601f8201601f19908116603f0116810190838211818310171561103557611035610fa7565b8160405282815287602084870101111561104e57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561108057600080fd5b5035919050565b60008083601f84011261109957600080fd5b50813567ffffffffffffffff8111156110b157600080fd5b6020830191508360208285010111156110c957600080fd5b9250929050565b600080600080606085870312156110e657600080fd5b8435935060208501356110f881610f75565b9250604085013567ffffffffffffffff81111561111457600080fd5b61112087828801611087565b95989497509550505050565b60005b8381101561114757818101518382015260200161112f565b838111156102ae5750506000910152565b6000815180845261117081602086016020860161112c565b601f01601f19169290920160200192915050565b60208152600061057b6020830184611158565b6000806000604084860312156111ac57600080fd5b83359250602084013567ffffffffffffffff8111156111ca57600080fd5b6111d686828701611087565b9497909650939450505050565b6000806000606084860312156111f857600080fd5b835161120381610f75565b602085015190935061121481610f75565b80925050604084015190509250925092565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061126f90830184611158565b9695505050505050565b6001600160f81b031981358181169160018510156112a15780818660010360031b1b83161692505b505092915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8416808210156112d9576112d96112a9565b90039392505050565b600181815b8085111561131d578160001904821115611303576113036112a9565b8085161561131057918102915b93841c93908002906112e7565b509250929050565b60008261133457506001610892565b8161134157506000610892565b816001811461135757600281146113615761137d565b6001915050610892565b60ff841115611372576113726112a9565b50506001821b610892565b5060208310610133831016604e8410600b84101617156113a0575081810a610892565b6113aa83836112e2565b80600019048211156113be576113be6112a9565b029392505050565b600061057b60ff841683611325565b6000826113f257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611411576114116112a9565b500290565b6000806040838503121561142957600080fd5b50508035926020909101359150565b6000808585111561144857600080fd5b8386111561145557600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156112a15760149490940360031b84901b1690921692915050565b600082198211156114a8576114a86112a9565b500190565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b6000825161150781846020870161112c565b9190910192915050565b60006020828403121561152357600080fd5b8151801515811461057b57600080fdfea2646970667358221220f1bb60faed1eee5b7cfb30b26e23221a0f1e55b87e56b2323d065677063d4b4064736f6c634300080b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063a2f21f8a11610066578063a2f21f8a14610152578063ac607c2114610179578063b07e54bb1461020e578063e248cff21461022e578063fa8675b01461024157600080fd5b806307b7ed99146100a35780630968f264146100b85780630a6d55d8146100cb57806330f08abd14610111578063318c136e1461012b575b600080fd5b6100b66100b1366004610f8a565b610254565b005b6100b66100c6366004610fbd565b610268565b6100f46100d936600461106e565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610119601281565b60405160ff9091168152602001610108565b6100f47f000000000000000000000000000000000000000000000000000000000000000081565b6100f47f000000000000000000000000000000000000000000000000000000000000000081565b6101d6610187366004610f8a565b600160208181526000928352604092839020805492810154845180860190955260029091015460ff81811615158652610100918290048116938601939093529293828216939091049091169084565b6040805194855292151560208086019190915291151592840192909252815115156060840152015160ff16608082015260a001610108565b61022161021c3660046110d0565b6102b4565b6040516101089190611184565b61022161023c366004611197565b610381565b6100b661024f3660046110d0565b610582565b61025c61060c565b61026581610686565b50565b61027061060c565b60008060008380602001905181019061028991906111e3565b919450925090506102a26001600160a01b0383166106f8565b506102ae838383610725565b50505050565b60606102be61060c565b60006102cc8385018561106e565b600087815260208181526040808320546001600160a01b0316808452600192839052922001549192509060ff16610326576040516325df77c560e11b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b03811660009081526001602081905260409091200154610100900460ff16156103605761035b818784610731565b61036c565b61036c8187308561079d565b61037681836107aa565b979650505050505050565b606061038b61060c565b6000610398858585610898565b80516001600160a01b03166000908152600160208190526040909120015490915060ff166103e75780516040516325df77c560e11b81526001600160a01b03909116600482015260240161031d565b80516001600160a01b031660009081526001602081905260409091200154610100900460ff161561042e57610429816000015182604001518360600151610b16565b610445565b610445816000015182604001518360600151610725565b60028160a00151600281111561045d5761045d611226565b141561046e5760c00151905061057b565b60018160a00151600281111561048657610486611226565b141561052d576000806104c0836080015160006101008660c0015187604001516001600160a01b0316610b4e90949392919063ffffffff16565b91509150811580156104d857506104d681610bd9565b155b156104f657604051632f89bddb60e21b815260040160405180910390fd5b8251604080850151602080870151925161051494939186910161123c565b604051602081830303815290604052935050505061057b565b80516040808301516020808501519251610568949391016001600160a01b039384168152919092166020820152604081019190915260600190565b6040516020818303038152906040529150505b9392505050565b61058a61060c565b61059c836001600160a01b03166106f8565b5060008481526020818152604080832080546001600160a01b0319166001600160a01b03881690811790915583526001918290529091208581558101805461ffff1916909117905580156102ae5760006105f68284611279565b60f81c90506106058482610bf4565b5050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106845760405162461bcd60e51b815260206004820152601e60248201527f73656e646572206d7573742062652062726964676520636f6e74726163740000604482015260640161031d565b565b6001600160a01b0381166000908152600160208190526040909120015460ff166106ce576040516325df77c560e11b81526001600160a01b038216600482015260240161031d565b6001600160a01b0316600090815260016020819052604090912001805461ff001916610100179055565b60006001600160a01b0382166107215760405163d92e233d60e01b815260040160405180910390fd5b5090565b826102ae818484610c9e565b60405163079cc67960e41b81526001600160a01b038381166004830152602482018390528491908216906379cc6790906044015b600060405180830381600087803b15801561077f57600080fd5b505af1158015610793573d6000803e3d6000fd5b5050505050505050565b8361060581858585610d06565b6001600160a01b038216600090815260016020908152604080832081518083019092526002015460ff80821615158084526101009092041692820192909252606092909161080b576040518060200160405280600081525092505050610892565b601260ff16826020015160ff161061084a576012826020015161082e91906112bf565b61083990600a6113c6565b61084390856113d5565b9050610872565b602082015161085a9060126112bf565b61086590600a6113c6565b61086f90856113f7565b90505b604080516020810183905201604051602081830303815290604052925050505b92915050565b6108d86040805160e08101825260008082526020820181905291810182905260608101829052608081018290529060a08201908152602001606081525090565b6000806108e784860186611416565b90925090506108f7816014610d3e565b506000610908605460408789611438565b61091191611462565b60008881526020819052604081205460609290921c92506001600160a01b039091169061093e8286610d71565b90506054600080606081610953856040611495565b8c1115610aaf578c8c8690809261096c93929190611438565b8101906109799190611416565b9094509250610989604086611495565b945060008411801561099b5750600083115b80156109b057508b6109ad8685611495565b11155b15610a5d575060016001600160a01b0388166109ea577f000000000000000000000000000000000000000000000000000000000000000097505b634726ca4360e01b87878f8f8990888b610a049190611495565b92610a1193929190611438565b604051602401610a2494939291906114ad565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529150610aaf565b506040805160048152602481018252602080820180516001600160e01b03166356a6881560e11b1790529151600292610a9d928a928c928f92910161123c565b60405160208183030381529060405291505b6040518060e00160405280886001600160a01b031681526020018b8152602001896001600160a01b03168152602001878152602001858152602001826002811115610afc57610afc611226565b815260200192909252509c9b505050505050505050505050565b6040516340c10f1960e01b81526001600160a01b038381166004830152602482018390528491908216906340c10f1990604401610765565b6000606060008060008661ffff1667ffffffffffffffff811115610b7457610b74610fa7565b6040519080825280601f01601f191660200182016040528015610b9e576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115610bbf578692505b828152826000602083013e90999098509650505050505050565b805160009015610bec5781518083602001fd5b506000919050565b6001600160a01b0382166000908152600160208190526040909120015460ff16610c3c576040516325df77c560e11b81526001600160a01b038316600482015260240161031d565b604080518082018252600180825260ff93841660208084019182526001600160a01b039690961660009081529190955291909120905160029091018054935161ffff1990941691151561ff001916919091176101009390921692909202179055565b6040516001600160a01b038316602482015260448101829052610d0190849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610e23565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526102ae9085906323b872dd60e01b90608401610cca565b6000818314610d6a5760405163c230690360e01b8152600481018490526024810183905260440161031d565b5090919050565b6001600160a01b038216600090815260016020908152604080832081518083019092526002015460ff8082161515808452610100909204169282019290925290610dbe5782915050610892565b601260ff16816020015160ff1610610dfe5760128160200151610de191906112bf565b610dec90600a6113c6565b610df690846113f7565b915050610892565b6020810151610e0e9060126112bf565b610e1990600a6113c6565b610df690846113d5565b813b80610e6a5760405162461bcd60e51b8152602060048201526015602482015274115490cc8c0e881b9bdd08184818dbdb9d1c9858dd605a1b604482015260640161031d565b600080846001600160a01b031684604051610e8591906114f5565b6000604051808303816000865af19150503d8060008114610ec2576040519150601f19603f3d011682016040523d82523d6000602084013e610ec7565b606091505b509150915081610f0e5760405162461bcd60e51b8152602060048201526012602482015271115490cc8c0e8818d85b1b0819985a5b195960721b604482015260640161031d565b8051156106055780806020019051810190610f299190611511565b6106055760405162461bcd60e51b815260206004820181905260248201527f45524332303a206f7065726174696f6e20646964206e6f742073756363656564604482015260640161031d565b6001600160a01b038116811461026557600080fd5b600060208284031215610f9c57600080fd5b813561057b81610f75565b634e487b7160e01b600052604160045260246000fd5b600060208284031215610fcf57600080fd5b813567ffffffffffffffff80821115610fe757600080fd5b818401915084601f830112610ffb57600080fd5b81358181111561100d5761100d610fa7565b604051601f8201601f19908116603f0116810190838211818310171561103557611035610fa7565b8160405282815287602084870101111561104e57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561108057600080fd5b5035919050565b60008083601f84011261109957600080fd5b50813567ffffffffffffffff8111156110b157600080fd5b6020830191508360208285010111156110c957600080fd5b9250929050565b600080600080606085870312156110e657600080fd5b8435935060208501356110f881610f75565b9250604085013567ffffffffffffffff81111561111457600080fd5b61112087828801611087565b95989497509550505050565b60005b8381101561114757818101518382015260200161112f565b838111156102ae5750506000910152565b6000815180845261117081602086016020860161112c565b601f01601f19169290920160200192915050565b60208152600061057b6020830184611158565b6000806000604084860312156111ac57600080fd5b83359250602084013567ffffffffffffffff8111156111ca57600080fd5b6111d686828701611087565b9497909650939450505050565b6000806000606084860312156111f857600080fd5b835161120381610f75565b602085015190935061121481610f75565b80925050604084015190509250925092565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061126f90830184611158565b9695505050505050565b6001600160f81b031981358181169160018510156112a15780818660010360031b1b83161692505b505092915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8416808210156112d9576112d96112a9565b90039392505050565b600181815b8085111561131d578160001904821115611303576113036112a9565b8085161561131057918102915b93841c93908002906112e7565b509250929050565b60008261133457506001610892565b8161134157506000610892565b816001811461135757600281146113615761137d565b6001915050610892565b60ff841115611372576113726112a9565b50506001821b610892565b5060208310610133831016604e8410600b84101617156113a0575081810a610892565b6113aa83836112e2565b80600019048211156113be576113be6112a9565b029392505050565b600061057b60ff841683611325565b6000826113f257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611411576114116112a9565b500290565b6000806040838503121561142957600080fd5b50508035926020909101359150565b6000808585111561144857600080fd5b8386111561145557600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156112a15760149490940360031b84901b1690921692915050565b600082198211156114a8576114a86112a9565b500190565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b6000825161150781846020870161112c565b9190910192915050565b60006020828403121561152357600080fd5b8151801515811461057b57600080fdfea2646970667358221220f1bb60faed1eee5b7cfb30b26e23221a0f1e55b87e56b2323d065677063d4b4064736f6c634300080b0033",
  "immutableReferences": {
    "13336": [
      {
        "length": 32,
        "start": 343
      },
      {
        "length": 32,
        "start": 2504
      }
    ],
    "14625": [
      {
        "length": 32,
        "start": 304
      },
      {
        "length": 32,
        "start": 1559
      }
    ]
  },
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:491:105",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:105",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "74:117:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "84:22:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "99:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "93:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "93:13:105"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "84:5:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "169:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "178:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "181:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "171:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "171:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "171:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "128:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "139:5:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "154:3:105",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "159:1:105",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "150:3:105"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "150:11:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "163:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "146:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "146:19:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "135:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "135:31:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "125:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "125:42:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "118:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "118:50:105"
                  },
                  "nodeType": "YulIf",
                  "src": "115:70:105"
                }
              ]
            },
            "name": "abi_decode_address_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "53:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "64:5:105",
                "type": ""
              }
            ],
            "src": "14:177:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "294:195:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "340:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "349:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "352:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "342:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "342:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "342:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "315:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "324:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "311:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "311:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "336:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "307:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "307:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "304:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "365:50:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "405:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address_fromMemory",
                      "nodeType": "YulIdentifier",
                      "src": "375:29:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "375:40:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "365:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "424:59:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "468:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "479:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "464:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "464:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address_fromMemory",
                      "nodeType": "YulIdentifier",
                      "src": "434:29:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "434:49:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "424:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_address_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "252:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "263:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "275:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "283:6:105",
                "type": ""
              }
            ],
            "src": "196:293:105"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n    }\n}",
      "id": 105,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:13214:105",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:105",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "59:86:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "123:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "132:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "135:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "125:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "125:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "125:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "82:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "93:5:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "108:3:105",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "113:1:105",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "104:3:105"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "104:11:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "117:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "100:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "100:19:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "89:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "89:31:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "79:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "79:42:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "72:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "72:50:105"
                  },
                  "nodeType": "YulIf",
                  "src": "69:70:105"
                }
              ]
            },
            "name": "validator_revert_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "48:5:105",
                "type": ""
              }
            ],
            "src": "14:131:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "220:177:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "266:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "275:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "278:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "268:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "268:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "268:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "241:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "250:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "237:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "237:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "262:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "233:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "233:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "230:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "291:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "317:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "304:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "304:23:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "295:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "361:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "336:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "336:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "336:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "376:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "386:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "376:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "186:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "197:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "209:6:105",
                "type": ""
              }
            ],
            "src": "150:247:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "434:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "451:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "458:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "463:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "454:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "454:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "444:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "444:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "444:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "491:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "494:4:105",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "484:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "484:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "484:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "515:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "518:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "508:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "508:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "508:15:105"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nodeType": "YulFunctionDefinition",
            "src": "402:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "613:842:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "659:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "668:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "671:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "661:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "661:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "661:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "634:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "643:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "630:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "630:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "655:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "626:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "626:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "623:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "684:37:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "711:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "698:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "698:23:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "688:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "730:28:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "740:18:105",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "734:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "785:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "794:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "797:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "787:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "787:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "787:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "773:6:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "781:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "770:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "770:14:105"
                  },
                  "nodeType": "YulIf",
                  "src": "767:34:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "810:32:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "824:9:105"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "835:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "820:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "820:22:105"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "814:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "890:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "899:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "902:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "892:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "892:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "892:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "869:2:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "873:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "865:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "865:13:105"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "880:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "861:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "861:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "854:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "854:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "851:55:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "915:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "938:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "925:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "925:16:105"
                  },
                  "variables": [
                    {
                      "name": "_3",
                      "nodeType": "YulTypedName",
                      "src": "919:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "964:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "966:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "966:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "966:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "956:2:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "960:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "953:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "953:10:105"
                  },
                  "nodeType": "YulIf",
                  "src": "950:36:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "995:17:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1009:2:105",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "not",
                      "nodeType": "YulIdentifier",
                      "src": "1005:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1005:7:105"
                  },
                  "variables": [
                    {
                      "name": "_4",
                      "nodeType": "YulTypedName",
                      "src": "999:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1021:23:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1041:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "1035:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1035:9:105"
                  },
                  "variables": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulTypedName",
                      "src": "1025:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1053:71:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "1075:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "1099:2:105"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1103:4:105",
                                        "type": "",
                                        "value": "0x1f"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1095:3:105"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1095:13:105"
                                  },
                                  {
                                    "name": "_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "1110:2:105"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "1091:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1091:22:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1115:2:105",
                                "type": "",
                                "value": "63"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1087:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1087:31:105"
                          },
                          {
                            "name": "_4",
                            "nodeType": "YulIdentifier",
                            "src": "1120:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1083:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1083:40:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1071:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1071:53:105"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nodeType": "YulTypedName",
                      "src": "1057:10:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1183:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "1185:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1185:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1185:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "1142:10:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1154:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "1139:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1139:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "1162:10:105"
                          },
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "1174:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "1159:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1159:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "1136:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1136:46:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1133:72:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1221:2:105",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nodeType": "YulIdentifier",
                        "src": "1225:10:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1214:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1214:22:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1214:22:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "1252:6:105"
                      },
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "1260:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1245:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1245:18:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1245:18:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1309:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1318:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1321:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1311:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1311:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1311:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "1286:2:105"
                              },
                              {
                                "name": "_3",
                                "nodeType": "YulIdentifier",
                                "src": "1290:2:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1282:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1282:11:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1295:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1278:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1278:20:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "1300:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1275:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1275:33:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1272:53:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "1351:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1359:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1347:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1347:15:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "1368:2:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1372:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1364:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1364:11:105"
                      },
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "1377:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "1334:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1334:46:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1334:46:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "1404:6:105"
                              },
                              {
                                "name": "_3",
                                "nodeType": "YulIdentifier",
                                "src": "1412:2:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1400:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1400:15:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1417:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1396:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1396:24:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1422:1:105",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1389:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1389:35:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1389:35:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1433:16:105",
                  "value": {
                    "name": "memPtr",
                    "nodeType": "YulIdentifier",
                    "src": "1443:6:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1433:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "579:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "590:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "602:6:105",
                "type": ""
              }
            ],
            "src": "534:921:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1530:110:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1576:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1585:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1588:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1578:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1578:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1578:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1551:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1560:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1547:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1547:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1572:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1543:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1543:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1540:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1601:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1624:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1611:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1611:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1601:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1496:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1507:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1519:6:105",
                "type": ""
              }
            ],
            "src": "1460:180:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1746:102:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1756:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1768:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1779:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1764:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1764:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1756:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1798:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "1813:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1829:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1834:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "1825:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1825:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1838:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "1821:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1821:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1809:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1809:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1791:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1791:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1791:51:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1715:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1726:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1737:4:105",
                "type": ""
              }
            ],
            "src": "1645:203:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1950:87:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1960:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1972:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1983:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1968:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1968:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1960:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2002:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "2017:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2025:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2013:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2013:17:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1995:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1995:36:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1995:36:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1919:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1930:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1941:4:105",
                "type": ""
              }
            ],
            "src": "1853:184:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2269:332:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2279:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2291:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2302:3:105",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2287:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2287:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2279:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2322:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2333:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2315:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2315:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2315:25:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2360:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2371:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2356:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2356:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value1",
                                "nodeType": "YulIdentifier",
                                "src": "2390:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "2383:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2383:14:105"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "2376:6:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2376:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2349:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2349:50:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2349:50:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2419:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2430:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2415:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2415:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value2",
                                "nodeType": "YulIdentifier",
                                "src": "2449:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "2442:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2442:14:105"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "2435:6:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2435:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2408:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2408:50:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2408:50:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2478:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2489:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2474:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2474:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2514:6:105"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2508:5:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2508:13:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "2501:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2501:21:105"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "2494:6:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2494:29:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2467:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2467:57:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2467:57:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2544:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2555:3:105",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2540:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2540:19:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2575:6:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2583:2:105",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2571:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2571:15:105"
                              }
                            ],
                            "functionName": {
                              "name": "mload",
                              "nodeType": "YulIdentifier",
                              "src": "2565:5:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2565:22:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2589:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2561:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2561:33:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2533:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2533:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2533:62:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_bool_t_bool_t_struct$_Decimals_$14633_memory_ptr__to_t_bytes32_t_bool_t_bool_t_struct$_Decimals_$14633_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2214:9:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "2225:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "2233:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2241:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2249:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2260:4:105",
                "type": ""
              }
            ],
            "src": "2042:559:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2678:275:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2727:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2736:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2739:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2729:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2729:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2729:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2706:6:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2714:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2702:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2702:17:105"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "2721:3:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "2698:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2698:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "2691:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2691:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "2688:55:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2752:30:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2775:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2762:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2762:20:105"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "2752:6:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2825:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2834:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2837:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2827:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2827:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2827:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "2797:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2805:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "2794:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2794:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "2791:50:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2850:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2866:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2874:4:105",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2862:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2862:17:105"
                  },
                  "variableNames": [
                    {
                      "name": "arrayPos",
                      "nodeType": "YulIdentifier",
                      "src": "2850:8:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2931:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2940:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2943:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2933:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2933:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2933:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2902:6:105"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "2910:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2898:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2898:19:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2919:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2894:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2894:30:105"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "2926:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "2891:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2891:39:105"
                  },
                  "nodeType": "YulIf",
                  "src": "2888:59:105"
                }
              ]
            },
            "name": "abi_decode_bytes_calldata",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "2641:6:105",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "2649:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "arrayPos",
                "nodeType": "YulTypedName",
                "src": "2657:8:105",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "2667:6:105",
                "type": ""
              }
            ],
            "src": "2606:347:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3081:489:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3127:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3136:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3139:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3129:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3129:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3129:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3102:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3111:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3098:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3098:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3123:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3094:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3094:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3091:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3152:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3175:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3162:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3162:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3152:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3194:45:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3224:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3235:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3220:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3220:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3207:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3207:32:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "3198:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3273:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3248:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3248:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3248:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3288:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "3298:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "3288:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3312:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3343:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3354:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3339:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3339:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3326:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3326:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "3316:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3401:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3410:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3413:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3403:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3403:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3403:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "3373:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3381:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3370:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3370:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3367:50:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3426:84:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3482:9:105"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "3493:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3478:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3478:22:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "3502:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "3452:25:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3452:58:105"
                  },
                  "variables": [
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "3430:8:105",
                      "type": ""
                    },
                    {
                      "name": "value3_1",
                      "nodeType": "YulTypedName",
                      "src": "3440:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3519:18:105",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "3529:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "3519:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3546:18:105",
                  "value": {
                    "name": "value3_1",
                    "nodeType": "YulIdentifier",
                    "src": "3556:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "3546:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_addresst_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3023:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3034:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3046:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3054:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "3062:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "3070:6:105",
                "type": ""
              }
            ],
            "src": "2958:612:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3628:205:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3638:10:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "3647:1:105",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "3642:1:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3707:63:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "3732:3:105"
                                },
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "3737:1:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3728:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3728:11:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "src",
                                      "nodeType": "YulIdentifier",
                                      "src": "3751:3:105"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "3756:1:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "3747:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3747:11:105"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "3741:5:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3741:18:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3721:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3721:39:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3721:39:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "3668:1:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3671:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "3665:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3665:13:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "3679:19:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "3681:15:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "3690:1:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3693:2:105",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "3686:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3686:10:105"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "3681:1:105"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "3661:3:105",
                    "statements": []
                  },
                  "src": "3657:113:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3796:31:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "3809:3:105"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "3814:6:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3805:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3805:16:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3823:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3798:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3798:27:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3798:27:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "3785:1:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3788:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3782:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3782:13:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3779:48:105"
                }
              ]
            },
            "name": "copy_memory_to_memory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "3606:3:105",
                "type": ""
              },
              {
                "name": "dst",
                "nodeType": "YulTypedName",
                "src": "3611:3:105",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "3616:6:105",
                "type": ""
              }
            ],
            "src": "3575:258:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3887:208:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3897:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3917:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "3911:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3911:12:105"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "3901:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "3939:3:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3944:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3932:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3932:19:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3932:19:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "3986:5:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3993:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3982:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3982:16:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "4004:3:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4009:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4000:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4000:14:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "4016:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "3960:21:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3960:63:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3960:63:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4032:57:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "4047:3:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4060:6:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4068:2:105",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4056:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4056:15:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4077:2:105",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "4073:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4073:7:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "4052:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4052:29:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4043:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4043:39:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4084:4:105",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4039:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4039:50:105"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "4032:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_bytes",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "3864:5:105",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "3871:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "3879:3:105",
                "type": ""
              }
            ],
            "src": "3838:257:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4219:98:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4236:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4247:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4229:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4229:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4229:21:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4259:52:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "4284:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4296:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4307:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4292:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4292:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "4267:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4267:44:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4259:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4188:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4199:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4210:4:105",
                "type": ""
              }
            ],
            "src": "4100:217:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4428:371:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4474:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4483:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4486:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4476:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4476:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4476:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4449:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4458:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4445:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4445:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4470:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4441:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4441:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4438:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4499:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4522:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4509:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4509:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "4499:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4541:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4572:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4583:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4568:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4568:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4555:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4555:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "4545:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4630:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4639:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4642:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4632:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4632:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4632:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "4602:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4610:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4599:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4599:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4596:50:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4655:84:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4711:9:105"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "4722:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4707:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4707:22:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "4731:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "4681:25:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4681:58:105"
                  },
                  "variables": [
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "4659:8:105",
                      "type": ""
                    },
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "4669:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4748:18:105",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "4758:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "4748:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4775:18:105",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "4785:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "4775:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4378:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4389:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4401:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4409:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "4417:6:105",
                "type": ""
              }
            ],
            "src": "4322:477:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4935:331:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4981:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4990:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4993:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4983:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4983:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4983:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4956:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4965:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4952:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4952:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4977:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4948:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4948:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4945:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5006:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5025:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "5019:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5019:16:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "5010:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "5069:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "5044:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5044:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5044:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5084:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "5094:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5084:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5108:40:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5133:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5144:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5129:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5129:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "5123:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5123:25:105"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "5112:7:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "5182:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "5157:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5157:33:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5157:33:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5199:17:105",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "5209:7:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "5199:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5225:35:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5245:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5256:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5241:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5241:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "5235:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5235:25:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "5225:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address_payablet_address_payablet_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4885:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4896:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4908:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4916:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "4924:6:105",
                "type": ""
              }
            ],
            "src": "4804:462:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5341:110:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5387:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5396:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5399:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5389:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5389:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5389:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5362:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5371:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5358:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5358:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5383:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5354:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5354:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "5351:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5412:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5435:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5422:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5422:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5412:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5307:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5318:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5330:6:105",
                "type": ""
              }
            ],
            "src": "5271:180:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5488:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5505:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5512:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5517:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "5508:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5508:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5498:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5498:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5498:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5545:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5548:4:105",
                        "type": "",
                        "value": "0x21"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5538:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5538:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5538:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5569:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5572:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "5562:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5562:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5562:15:105"
                }
              ]
            },
            "name": "panic_error_0x21",
            "nodeType": "YulFunctionDefinition",
            "src": "5456:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5791:285:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5801:29:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5819:3:105",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5824:1:105",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "5815:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5815:11:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5828:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "5811:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5811:19:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "5805:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5846:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "5861:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "5869:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "5857:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5857:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5839:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5839:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5839:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5893:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5904:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5889:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5889:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "5913:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "5921:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "5909:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5909:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5882:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5882:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5882:43:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5945:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5956:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5941:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5941:18:105"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "5961:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5934:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5934:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5934:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5988:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5999:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5984:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5984:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6004:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5977:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5977:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5977:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6017:53:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "6042:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6054:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6065:3:105",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6050:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6050:19:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "6025:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6025:45:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6017:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5736:9:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "5747:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "5755:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5763:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5771:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5782:4:105",
                "type": ""
              }
            ],
            "src": "5588:488:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6238:218:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6248:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6260:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6271:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6256:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6256:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6248:4:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6283:29:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6301:3:105",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6306:1:105",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "6297:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6297:11:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6310:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "6293:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6293:19:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "6287:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6328:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "6343:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "6351:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "6339:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6339:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6321:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6321:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6321:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6375:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6386:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6371:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6371:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "6395:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "6403:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "6391:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6391:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6364:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6364:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6364:43:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6427:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6438:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6423:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6423:18:105"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "6443:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6416:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6416:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6416:34:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6191:9:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "6202:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "6210:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6218:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6229:4:105",
                "type": ""
              }
            ],
            "src": "6081:375:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6561:216:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6571:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "array",
                        "nodeType": "YulIdentifier",
                        "src": "6594:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6581:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6581:19:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "6575:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6609:23:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6623:3:105",
                        "type": "",
                        "value": "248"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6628:3:105",
                        "type": "",
                        "value": "255"
                      }
                    ],
                    "functionName": {
                      "name": "shl",
                      "nodeType": "YulIdentifier",
                      "src": "6619:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6619:13:105"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "6613:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6641:20:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "6654:2:105"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "6658:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "6650:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6650:11:105"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "6641:5:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6692:79:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "6706:55:105",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "6723:2:105"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6735:1:105",
                                          "type": "",
                                          "value": "3"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "6742:1:105",
                                              "type": "",
                                              "value": "1"
                                            },
                                            {
                                              "name": "len",
                                              "nodeType": "YulIdentifier",
                                              "src": "6745:3:105"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "sub",
                                            "nodeType": "YulIdentifier",
                                            "src": "6738:3:105"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6738:11:105"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "shl",
                                        "nodeType": "YulIdentifier",
                                        "src": "6731:3:105"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6731:19:105"
                                    },
                                    {
                                      "name": "_2",
                                      "nodeType": "YulIdentifier",
                                      "src": "6752:2:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "shl",
                                    "nodeType": "YulIdentifier",
                                    "src": "6727:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "6727:28:105"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "6719:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "6719:37:105"
                            },
                            {
                              "name": "_2",
                              "nodeType": "YulIdentifier",
                              "src": "6758:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "6715:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6715:46:105"
                        },
                        "variableNames": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "6706:5:105"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "len",
                        "nodeType": "YulIdentifier",
                        "src": "6676:3:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6681:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "6673:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6673:10:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6670:101:105"
                }
              ]
            },
            "name": "convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes1",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "6536:5:105",
                "type": ""
              },
              {
                "name": "len",
                "nodeType": "YulTypedName",
                "src": "6543:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "6551:5:105",
                "type": ""
              }
            ],
            "src": "6461:316:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6956:180:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6973:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6984:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6966:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6966:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6966:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7007:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7018:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7003:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7003:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7023:2:105",
                        "type": "",
                        "value": "30"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6996:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6996:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6996:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7046:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7057:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7042:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7042:18:105"
                      },
                      {
                        "hexValue": "73656e646572206d7573742062652062726964676520636f6e7472616374",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7062:32:105",
                        "type": "",
                        "value": "sender must be bridge contract"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7035:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7035:60:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7035:60:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7104:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7116:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7127:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7112:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7112:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7104:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0febc0fc8991eb26dfaaceeb4d73d25b76da338550ed76c60410fec84388058e__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6933:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6947:4:105",
                "type": ""
              }
            ],
            "src": "6782:354:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7270:145:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7280:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7292:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7303:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7288:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7288:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7280:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7322:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "7337:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7353:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7358:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "7349:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7349:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7362:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "7345:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7345:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "7333:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7333:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7315:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7315:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7315:51:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7386:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7397:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7382:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7382:18:105"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "7402:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7375:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7375:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7375:34:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7231:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "7242:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7250:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7261:4:105",
                "type": ""
              }
            ],
            "src": "7141:274:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7452:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7469:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7476:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7481:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "7472:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7472:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7462:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7462:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7462:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7509:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7512:4:105",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7502:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7502:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7502:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7533:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7536:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "7526:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7526:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7526:15:105"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "7420:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7599:148:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7609:23:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "7624:1:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7627:4:105",
                        "type": "",
                        "value": "0xff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "7620:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7620:12:105"
                  },
                  "variables": [
                    {
                      "name": "x_1",
                      "nodeType": "YulTypedName",
                      "src": "7613:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7641:23:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "7656:1:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7659:4:105",
                        "type": "",
                        "value": "0xff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "7652:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7652:12:105"
                  },
                  "variables": [
                    {
                      "name": "y_1",
                      "nodeType": "YulTypedName",
                      "src": "7645:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7689:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "7691:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7691:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7691:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x_1",
                        "nodeType": "YulIdentifier",
                        "src": "7679:3:105"
                      },
                      {
                        "name": "y_1",
                        "nodeType": "YulIdentifier",
                        "src": "7684:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "7676:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7676:12:105"
                  },
                  "nodeType": "YulIf",
                  "src": "7673:38:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7720:21:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x_1",
                        "nodeType": "YulIdentifier",
                        "src": "7732:3:105"
                      },
                      {
                        "name": "y_1",
                        "nodeType": "YulIdentifier",
                        "src": "7737:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "7728:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7728:13:105"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "7720:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_sub_t_uint8",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "7581:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "7584:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "7590:4:105",
                "type": ""
              }
            ],
            "src": "7552:195:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7816:358:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7826:16:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "7841:1:105",
                    "type": "",
                    "value": "1"
                  },
                  "variables": [
                    {
                      "name": "power_1",
                      "nodeType": "YulTypedName",
                      "src": "7830:7:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7851:16:105",
                  "value": {
                    "name": "power_1",
                    "nodeType": "YulIdentifier",
                    "src": "7860:7:105"
                  },
                  "variableNames": [
                    {
                      "name": "power",
                      "nodeType": "YulIdentifier",
                      "src": "7851:5:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7876:13:105",
                  "value": {
                    "name": "_base",
                    "nodeType": "YulIdentifier",
                    "src": "7884:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "base",
                      "nodeType": "YulIdentifier",
                      "src": "7876:4:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7940:228:105",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7985:22:105",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [],
                                "functionName": {
                                  "name": "panic_error_0x11",
                                  "nodeType": "YulIdentifier",
                                  "src": "7987:16:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7987:18:105"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7987:18:105"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "base",
                              "nodeType": "YulIdentifier",
                              "src": "7960:4:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "7974:1:105",
                                      "type": "",
                                      "value": "0"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "not",
                                    "nodeType": "YulIdentifier",
                                    "src": "7970:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "7970:6:105"
                                },
                                {
                                  "name": "base",
                                  "nodeType": "YulIdentifier",
                                  "src": "7978:4:105"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "7966:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7966:17:105"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "7957:2:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7957:27:105"
                        },
                        "nodeType": "YulIf",
                        "src": "7954:53:105"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8046:29:105",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8048:25:105",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "power",
                                    "nodeType": "YulIdentifier",
                                    "src": "8061:5:105"
                                  },
                                  {
                                    "name": "base",
                                    "nodeType": "YulIdentifier",
                                    "src": "8068:4:105"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "8057:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8057:16:105"
                              },
                              "variableNames": [
                                {
                                  "name": "power",
                                  "nodeType": "YulIdentifier",
                                  "src": "8048:5:105"
                                }
                              ]
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "exponent",
                              "nodeType": "YulIdentifier",
                              "src": "8027:8:105"
                            },
                            {
                              "name": "power_1",
                              "nodeType": "YulIdentifier",
                              "src": "8037:7:105"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "8023:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8023:22:105"
                        },
                        "nodeType": "YulIf",
                        "src": "8020:55:105"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "8088:23:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "base",
                              "nodeType": "YulIdentifier",
                              "src": "8100:4:105"
                            },
                            {
                              "name": "base",
                              "nodeType": "YulIdentifier",
                              "src": "8106:4:105"
                            }
                          ],
                          "functionName": {
                            "name": "mul",
                            "nodeType": "YulIdentifier",
                            "src": "8096:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8096:15:105"
                        },
                        "variableNames": [
                          {
                            "name": "base",
                            "nodeType": "YulIdentifier",
                            "src": "8088:4:105"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "8124:34:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "power_1",
                              "nodeType": "YulIdentifier",
                              "src": "8140:7:105"
                            },
                            {
                              "name": "exponent",
                              "nodeType": "YulIdentifier",
                              "src": "8149:8:105"
                            }
                          ],
                          "functionName": {
                            "name": "shr",
                            "nodeType": "YulIdentifier",
                            "src": "8136:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8136:22:105"
                        },
                        "variableNames": [
                          {
                            "name": "exponent",
                            "nodeType": "YulIdentifier",
                            "src": "8124:8:105"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "exponent",
                        "nodeType": "YulIdentifier",
                        "src": "7909:8:105"
                      },
                      {
                        "name": "power_1",
                        "nodeType": "YulIdentifier",
                        "src": "7919:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "7906:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7906:21:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "7928:3:105",
                    "statements": []
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "7902:3:105",
                    "statements": []
                  },
                  "src": "7898:270:105"
                }
              ]
            },
            "name": "checked_exp_helper",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "_base",
                "nodeType": "YulTypedName",
                "src": "7780:5:105",
                "type": ""
              },
              {
                "name": "exponent",
                "nodeType": "YulTypedName",
                "src": "7787:8:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "power",
                "nodeType": "YulTypedName",
                "src": "7800:5:105",
                "type": ""
              },
              {
                "name": "base",
                "nodeType": "YulTypedName",
                "src": "7807:4:105",
                "type": ""
              }
            ],
            "src": "7752:422:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8238:747:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8276:52:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "8290:10:105",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "8299:1:105",
                          "type": "",
                          "value": "1"
                        },
                        "variableNames": [
                          {
                            "name": "power",
                            "nodeType": "YulIdentifier",
                            "src": "8290:5:105"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulLeave",
                        "src": "8313:5:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "exponent",
                        "nodeType": "YulIdentifier",
                        "src": "8258:8:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "8251:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8251:16:105"
                  },
                  "nodeType": "YulIf",
                  "src": "8248:80:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8361:52:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "8375:10:105",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "8384:1:105",
                          "type": "",
                          "value": "0"
                        },
                        "variableNames": [
                          {
                            "name": "power",
                            "nodeType": "YulIdentifier",
                            "src": "8375:5:105"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulLeave",
                        "src": "8398:5:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "base",
                        "nodeType": "YulIdentifier",
                        "src": "8347:4:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "8340:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8340:12:105"
                  },
                  "nodeType": "YulIf",
                  "src": "8337:76:105"
                },
                {
                  "cases": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "8449:52:105",
                        "statements": [
                          {
                            "nodeType": "YulAssignment",
                            "src": "8463:10:105",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8472:1:105",
                              "type": "",
                              "value": "1"
                            },
                            "variableNames": [
                              {
                                "name": "power",
                                "nodeType": "YulIdentifier",
                                "src": "8463:5:105"
                              }
                            ]
                          },
                          {
                            "nodeType": "YulLeave",
                            "src": "8486:5:105"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "8442:59:105",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8447:1:105",
                        "type": "",
                        "value": "1"
                      }
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "8517:123:105",
                        "statements": [
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "8552:22:105",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "panic_error_0x11",
                                      "nodeType": "YulIdentifier",
                                      "src": "8554:16:105"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8554:18:105"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "8554:18:105"
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "exponent",
                                  "nodeType": "YulIdentifier",
                                  "src": "8537:8:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "8547:3:105",
                                  "type": "",
                                  "value": "255"
                                }
                              ],
                              "functionName": {
                                "name": "gt",
                                "nodeType": "YulIdentifier",
                                "src": "8534:2:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8534:17:105"
                            },
                            "nodeType": "YulIf",
                            "src": "8531:43:105"
                          },
                          {
                            "nodeType": "YulAssignment",
                            "src": "8587:25:105",
                            "value": {
                              "arguments": [
                                {
                                  "name": "exponent",
                                  "nodeType": "YulIdentifier",
                                  "src": "8600:8:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "8610:1:105",
                                  "type": "",
                                  "value": "1"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "8596:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8596:16:105"
                            },
                            "variableNames": [
                              {
                                "name": "power",
                                "nodeType": "YulIdentifier",
                                "src": "8587:5:105"
                              }
                            ]
                          },
                          {
                            "nodeType": "YulLeave",
                            "src": "8625:5:105"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "8510:130:105",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8515:1:105",
                        "type": "",
                        "value": "2"
                      }
                    }
                  ],
                  "expression": {
                    "name": "base",
                    "nodeType": "YulIdentifier",
                    "src": "8429:4:105"
                  },
                  "nodeType": "YulSwitch",
                  "src": "8422:218:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8738:70:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "8752:28:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "base",
                              "nodeType": "YulIdentifier",
                              "src": "8765:4:105"
                            },
                            {
                              "name": "exponent",
                              "nodeType": "YulIdentifier",
                              "src": "8771:8:105"
                            }
                          ],
                          "functionName": {
                            "name": "exp",
                            "nodeType": "YulIdentifier",
                            "src": "8761:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8761:19:105"
                        },
                        "variableNames": [
                          {
                            "name": "power",
                            "nodeType": "YulIdentifier",
                            "src": "8752:5:105"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulLeave",
                        "src": "8793:5:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "base",
                                "nodeType": "YulIdentifier",
                                "src": "8662:4:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8668:2:105",
                                "type": "",
                                "value": "11"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "8659:2:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8659:12:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "exponent",
                                "nodeType": "YulIdentifier",
                                "src": "8676:8:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8686:2:105",
                                "type": "",
                                "value": "78"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "8673:2:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8673:16:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "8655:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8655:35:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "base",
                                "nodeType": "YulIdentifier",
                                "src": "8699:4:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8705:3:105",
                                "type": "",
                                "value": "307"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "8696:2:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8696:13:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "exponent",
                                "nodeType": "YulIdentifier",
                                "src": "8714:8:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8724:2:105",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "8711:2:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8711:16:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "8692:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8692:36:105"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "8652:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8652:77:105"
                  },
                  "nodeType": "YulIf",
                  "src": "8649:159:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8817:57:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "base",
                        "nodeType": "YulIdentifier",
                        "src": "8859:4:105"
                      },
                      {
                        "name": "exponent",
                        "nodeType": "YulIdentifier",
                        "src": "8865:8:105"
                      }
                    ],
                    "functionName": {
                      "name": "checked_exp_helper",
                      "nodeType": "YulIdentifier",
                      "src": "8840:18:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8840:34:105"
                  },
                  "variables": [
                    {
                      "name": "power_1",
                      "nodeType": "YulTypedName",
                      "src": "8821:7:105",
                      "type": ""
                    },
                    {
                      "name": "base_1",
                      "nodeType": "YulTypedName",
                      "src": "8830:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8919:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "8921:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8921:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8921:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "power_1",
                        "nodeType": "YulIdentifier",
                        "src": "8889:7:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8906:1:105",
                                "type": "",
                                "value": "0"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "8902:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8902:6:105"
                          },
                          {
                            "name": "base_1",
                            "nodeType": "YulIdentifier",
                            "src": "8910:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "div",
                          "nodeType": "YulIdentifier",
                          "src": "8898:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8898:19:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8886:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8886:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "8883:58:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8950:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "power_1",
                        "nodeType": "YulIdentifier",
                        "src": "8963:7:105"
                      },
                      {
                        "name": "base_1",
                        "nodeType": "YulIdentifier",
                        "src": "8972:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mul",
                      "nodeType": "YulIdentifier",
                      "src": "8959:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8959:20:105"
                  },
                  "variableNames": [
                    {
                      "name": "power",
                      "nodeType": "YulIdentifier",
                      "src": "8950:5:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_exp_unsigned",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "base",
                "nodeType": "YulTypedName",
                "src": "8209:4:105",
                "type": ""
              },
              {
                "name": "exponent",
                "nodeType": "YulTypedName",
                "src": "8215:8:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "power",
                "nodeType": "YulTypedName",
                "src": "8228:5:105",
                "type": ""
              }
            ],
            "src": "8179:806:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9058:72:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "9068:56:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "base",
                        "nodeType": "YulIdentifier",
                        "src": "9098:4:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "exponent",
                            "nodeType": "YulIdentifier",
                            "src": "9108:8:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9118:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9104:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9104:19:105"
                      }
                    ],
                    "functionName": {
                      "name": "checked_exp_unsigned",
                      "nodeType": "YulIdentifier",
                      "src": "9077:20:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9077:47:105"
                  },
                  "variableNames": [
                    {
                      "name": "power",
                      "nodeType": "YulIdentifier",
                      "src": "9068:5:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_exp_t_uint256_t_uint8",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "base",
                "nodeType": "YulTypedName",
                "src": "9029:4:105",
                "type": ""
              },
              {
                "name": "exponent",
                "nodeType": "YulTypedName",
                "src": "9035:8:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "power",
                "nodeType": "YulTypedName",
                "src": "9048:5:105",
                "type": ""
              }
            ],
            "src": "8990:140:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9181:171:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9212:111:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9233:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "9240:3:105",
                                  "type": "",
                                  "value": "224"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "9245:10:105",
                                  "type": "",
                                  "value": "0x4e487b71"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "9236:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9236:20:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "9226:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9226:31:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9226:31:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9277:1:105",
                              "type": "",
                              "value": "4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9280:4:105",
                              "type": "",
                              "value": "0x12"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "9270:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9270:15:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9270:15:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9305:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9308:4:105",
                              "type": "",
                              "value": "0x24"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "9298:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9298:15:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9298:15:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "9201:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "9194:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9194:9:105"
                  },
                  "nodeType": "YulIf",
                  "src": "9191:132:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9332:14:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "9341:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "9344:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "div",
                      "nodeType": "YulIdentifier",
                      "src": "9337:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9337:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "r",
                      "nodeType": "YulIdentifier",
                      "src": "9332:1:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_div_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "9166:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "9169:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "r",
                "nodeType": "YulTypedName",
                "src": "9175:1:105",
                "type": ""
              }
            ],
            "src": "9135:217:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9409:116:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9468:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "9470:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9470:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9470:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "x",
                                "nodeType": "YulIdentifier",
                                "src": "9440:1:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "9433:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9433:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "9426:6:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9426:17:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "9448:1:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9459:1:105",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "9455:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9455:6:105"
                              },
                              {
                                "name": "x",
                                "nodeType": "YulIdentifier",
                                "src": "9463:1:105"
                              }
                            ],
                            "functionName": {
                              "name": "div",
                              "nodeType": "YulIdentifier",
                              "src": "9451:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9451:14:105"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "9445:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9445:21:105"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "9422:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9422:45:105"
                  },
                  "nodeType": "YulIf",
                  "src": "9419:71:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9499:20:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "9514:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "9517:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "mul",
                      "nodeType": "YulIdentifier",
                      "src": "9510:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9510:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "product",
                      "nodeType": "YulIdentifier",
                      "src": "9499:7:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_mul_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "9388:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "9391:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "product",
                "nodeType": "YulTypedName",
                "src": "9397:7:105",
                "type": ""
              }
            ],
            "src": "9357:168:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9649:63:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "9666:3:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "9671:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9659:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9659:19:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9659:19:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9687:19:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "9698:3:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9703:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9694:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9694:12:105"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "9687:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_uint256__to_t_uint256__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "9625:3:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9630:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "9641:3:105",
                "type": ""
              }
            ],
            "src": "9530:182:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9804:161:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9850:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9859:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9862:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "9852:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9852:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9852:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "9825:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9834:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "9821:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9821:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9846:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "9817:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9817:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "9814:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9875:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9898:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "9885:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9885:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "9875:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9917:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9944:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9955:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9940:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9940:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "9927:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9927:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "9917:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9762:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "9773:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9785:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "9793:6:105",
                "type": ""
              }
            ],
            "src": "9717:248:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10100:201:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10138:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10147:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10150:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "10140:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10140:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10140:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "startIndex",
                        "nodeType": "YulIdentifier",
                        "src": "10116:10:105"
                      },
                      {
                        "name": "endIndex",
                        "nodeType": "YulIdentifier",
                        "src": "10128:8:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "10113:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10113:24:105"
                  },
                  "nodeType": "YulIf",
                  "src": "10110:44:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10187:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10196:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10199:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "10189:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10189:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10189:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "endIndex",
                        "nodeType": "YulIdentifier",
                        "src": "10169:8:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "10179:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "10166:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10166:20:105"
                  },
                  "nodeType": "YulIf",
                  "src": "10163:40:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10212:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "10229:6:105"
                      },
                      {
                        "name": "startIndex",
                        "nodeType": "YulIdentifier",
                        "src": "10237:10:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10225:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10225:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "offsetOut",
                      "nodeType": "YulIdentifier",
                      "src": "10212:9:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10257:38:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "endIndex",
                        "nodeType": "YulIdentifier",
                        "src": "10274:8:105"
                      },
                      {
                        "name": "startIndex",
                        "nodeType": "YulIdentifier",
                        "src": "10284:10:105"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "10270:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10270:25:105"
                  },
                  "variableNames": [
                    {
                      "name": "lengthOut",
                      "nodeType": "YulIdentifier",
                      "src": "10257:9:105"
                    }
                  ]
                }
              ]
            },
            "name": "calldata_array_index_range_access_t_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "10034:6:105",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "10042:6:105",
                "type": ""
              },
              {
                "name": "startIndex",
                "nodeType": "YulTypedName",
                "src": "10050:10:105",
                "type": ""
              },
              {
                "name": "endIndex",
                "nodeType": "YulTypedName",
                "src": "10062:8:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "offsetOut",
                "nodeType": "YulTypedName",
                "src": "10075:9:105",
                "type": ""
              },
              {
                "name": "lengthOut",
                "nodeType": "YulTypedName",
                "src": "10086:9:105",
                "type": ""
              }
            ],
            "src": "9970:331:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10407:236:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "10417:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "array",
                        "nodeType": "YulIdentifier",
                        "src": "10440:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "10427:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10427:19:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "10421:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "10455:41:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10469:26:105",
                        "type": "",
                        "value": "0xffffffffffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "not",
                      "nodeType": "YulIdentifier",
                      "src": "10465:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10465:31:105"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "10459:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10505:20:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "10518:2:105"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "10522:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "10514:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10514:11:105"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "10505:5:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10557:80:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "10571:56:105",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "10588:2:105"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10600:1:105",
                                          "type": "",
                                          "value": "3"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "10607:2:105",
                                              "type": "",
                                              "value": "20"
                                            },
                                            {
                                              "name": "len",
                                              "nodeType": "YulIdentifier",
                                              "src": "10611:3:105"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "sub",
                                            "nodeType": "YulIdentifier",
                                            "src": "10603:3:105"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "10603:12:105"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "shl",
                                        "nodeType": "YulIdentifier",
                                        "src": "10596:3:105"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10596:20:105"
                                    },
                                    {
                                      "name": "_2",
                                      "nodeType": "YulIdentifier",
                                      "src": "10618:2:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "shl",
                                    "nodeType": "YulIdentifier",
                                    "src": "10592:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "10592:29:105"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "10584:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "10584:38:105"
                            },
                            {
                              "name": "_2",
                              "nodeType": "YulIdentifier",
                              "src": "10624:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "10580:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10580:47:105"
                        },
                        "variableNames": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "10571:5:105"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "len",
                        "nodeType": "YulIdentifier",
                        "src": "10540:3:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10545:2:105",
                        "type": "",
                        "value": "20"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "10537:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10537:11:105"
                  },
                  "nodeType": "YulIf",
                  "src": "10534:103:105"
                }
              ]
            },
            "name": "convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes20",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "10382:5:105",
                "type": ""
              },
              {
                "name": "len",
                "nodeType": "YulTypedName",
                "src": "10389:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "10397:5:105",
                "type": ""
              }
            ],
            "src": "10306:337:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10696:80:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10723:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "10725:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10725:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10725:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "10712:1:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "10719:1:105"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "10715:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10715:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "10709:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10709:13:105"
                  },
                  "nodeType": "YulIf",
                  "src": "10706:39:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10754:16:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "10765:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "10768:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10761:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10761:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "sum",
                      "nodeType": "YulIdentifier",
                      "src": "10754:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_add_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "10679:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "10682:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "sum",
                "nodeType": "YulTypedName",
                "src": "10688:3:105",
                "type": ""
              }
            ],
            "src": "10648:128:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10966:374:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10983:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "10998:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11014:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11019:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "11010:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11010:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11023:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "11006:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11006:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "10994:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10994:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10976:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10976:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10976:51:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11047:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11058:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11043:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11043:18:105"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "11063:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11036:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11036:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11036:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11090:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11101:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11086:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11086:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11106:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11079:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11079:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11079:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11129:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11140:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11125:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11125:18:105"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "11145:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11118:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11118:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11118:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11178:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11189:3:105",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11174:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11174:19:105"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "11195:6:105"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "11203:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "11161:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11161:49:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11161:49:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "11234:9:105"
                              },
                              {
                                "name": "value3",
                                "nodeType": "YulIdentifier",
                                "src": "11245:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "11230:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11230:22:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11254:3:105",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11226:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11226:32:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11260:1:105",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11219:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11219:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11219:43:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11271:63:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11287:9:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "11306:6:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11314:2:105",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11302:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11302:15:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11323:2:105",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "11319:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11319:7:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "11298:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11298:29:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11283:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11283:45:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11330:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11279:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11279:55:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11271:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint256_t_bytes_calldata_ptr__to_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10911:9:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "10922:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "10930:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "10938:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "10946:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10957:4:105",
                "type": ""
              }
            ],
            "src": "10781:559:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11474:119:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "11484:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11496:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11507:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11492:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11492:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11484:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11526:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "11537:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11519:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11519:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11519:25:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11564:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11575:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11560:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11560:18:105"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "11580:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11553:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11553:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11553:34:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11435:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "11446:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "11454:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11465:4:105",
                "type": ""
              }
            ],
            "src": "11345:248:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11772:171:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11789:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11800:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11782:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11782:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11782:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11823:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11834:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11819:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11819:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11839:2:105",
                        "type": "",
                        "value": "21"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11812:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11812:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11812:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11862:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11873:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11858:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11858:18:105"
                      },
                      {
                        "hexValue": "45524332303a206e6f74206120636f6e7472616374",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "11878:23:105",
                        "type": "",
                        "value": "ERC20: not a contract"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11851:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11851:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11851:51:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11911:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11923:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11934:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11919:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11919:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11911:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_028c03388403386dec779e3128482620314456686930c5ae581350674b6d1cc3__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11749:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11763:4:105",
                "type": ""
              }
            ],
            "src": "11598:345:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12085:137:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12095:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "12115:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "12109:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12109:13:105"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "12099:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "12157:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12165:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12153:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12153:17:105"
                      },
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "12172:3:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "12177:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "12131:21:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12131:53:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12131:53:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12193:23:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "12204:3:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "12209:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12200:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12200:16:105"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "12193:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "12061:3:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "12066:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "12077:3:105",
                "type": ""
              }
            ],
            "src": "11948:274:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12401:168:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12418:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12429:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12411:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12411:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12411:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12452:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12463:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12448:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12448:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12468:2:105",
                        "type": "",
                        "value": "18"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12441:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12441:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12441:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12491:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12502:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12487:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12487:18:105"
                      },
                      {
                        "hexValue": "45524332303a2063616c6c206661696c6564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "12507:20:105",
                        "type": "",
                        "value": "ERC20: call failed"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12480:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12480:48:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12480:48:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12537:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12549:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12560:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12545:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12545:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12537:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_3576d6dfb5a800b5f7598d3cc3220135845acd27db3901a5c3c655559195efba__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12378:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12392:4:105",
                "type": ""
              }
            ],
            "src": "12227:342:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12652:199:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "12698:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12707:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12710:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "12700:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12700:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "12700:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "12673:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12682:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "12669:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12669:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12694:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "12665:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12665:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "12662:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12723:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12742:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "12736:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12736:16:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "12727:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "12805:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12814:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12817:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "12807:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12807:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "12807:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "12774:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "12795:5:105"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "12788:6:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12788:13:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "12781:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "12781:21:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "12771:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12771:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "12764:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12764:40:105"
                  },
                  "nodeType": "YulIf",
                  "src": "12761:60:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12830:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "12840:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "12830:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12618:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "12629:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "12641:6:105",
                "type": ""
              }
            ],
            "src": "12574:277:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13030:182:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13047:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13058:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13040:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13040:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13040:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13081:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13092:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13077:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13077:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13097:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13070:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13070:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13070:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13120:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13131:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13116:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13116:18:105"
                      },
                      {
                        "hexValue": "45524332303a206f7065726174696f6e20646964206e6f742073756363656564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13136:34:105",
                        "type": "",
                        "value": "ERC20: operation did not succeed"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13109:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13109:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13109:62:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13180:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13192:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13203:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13188:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13188:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13180:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0e070c5d84d2ce64f06a55372ede71bea348c7746469ec289c4aba299bc05fdc__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13007:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13021:4:105",
                "type": ""
              }
            ],
            "src": "12856:356:105"
          }
        ]
      },
      "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 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_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value0 := memPtr\n    }\n    function abi_decode_tuple_t_bytes32(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_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_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_bytes32_t_bool_t_bool_t_struct$_Decimals_$14633_memory_ptr__to_t_bytes32_t_bool_t_bool_t_struct$_Decimals_$14633_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), iszero(iszero(value2)))\n        mstore(add(headStart, 96), iszero(iszero(mload(value3))))\n        mstore(add(headStart, 128), and(mload(add(value3, 32)), 0xff))\n    }\n    function abi_decode_bytes_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, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bytes32t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bytes32t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n    }\n    function abi_decode_tuple_t_address_payablet_address_payablet_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := mload(add(headStart, 64))\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 panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes1(array, len) -> value\n    {\n        let _1 := calldataload(array)\n        let _2 := shl(248, 255)\n        value := and(_1, _2)\n        if lt(len, 1)\n        {\n            value := and(and(_1, shl(shl(3, sub(1, len)), _2)), _2)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_0febc0fc8991eb26dfaaceeb4d73d25b76da338550ed76c60410fec84388058e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"sender must be bridge contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\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_sub_t_uint8(x, y) -> diff\n    {\n        let x_1 := and(x, 0xff)\n        let y_1 := and(y, 0xff)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(not(0), base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint8(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, and(exponent, 0xff))\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function abi_encode_tuple_packed_t_uint256__to_t_uint256__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, value0)\n        end := add(pos, 32)\n    }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function calldata_array_index_range_access_t_bytes_calldata_ptr(offset, length, startIndex, endIndex) -> offsetOut, lengthOut\n    {\n        if gt(startIndex, endIndex) { revert(0, 0) }\n        if gt(endIndex, length) { revert(0, 0) }\n        offsetOut := add(offset, startIndex)\n        lengthOut := sub(endIndex, startIndex)\n    }\n    function convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes20(array, len) -> value\n    {\n        let _1 := calldataload(array)\n        let _2 := not(0xffffffffffffffffffffffff)\n        value := and(_1, _2)\n        if lt(len, 20)\n        {\n            value := and(and(_1, shl(shl(3, sub(20, len)), _2)), _2)\n        }\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 abi_encode_tuple_t_address_t_uint256_t_bytes_calldata_ptr__to_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), 96)\n        mstore(add(headStart, 96), value3)\n        calldatacopy(add(headStart, 128), value2, value3)\n        mstore(add(add(headStart, value3), 128), 0)\n        tail := add(add(headStart, and(add(value3, 31), not(31))), 128)\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_stringliteral_028c03388403386dec779e3128482620314456686930c5ae581350674b6d1cc3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"ERC20: not a contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_3576d6dfb5a800b5f7598d3cc3220135845acd27db3901a5c3c655559195efba__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"ERC20: call failed\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_0e070c5d84d2ce64f06a55372ede71bea348c7746469ec289c4aba299bc05fdc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"ERC20: operation did not succeed\")\n        tail := add(headStart, 96)\n    }\n}",
      "id": 105,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "454:7249:74:-:0;;;852:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1298:30:76;;;;;1198:48:72::1;;::::0;454:7249:74;;14:177:105;93:13;;-1:-1:-1;;;;;135:31:105;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;:::-;454:7249:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "454:7249:74:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1745:120:76;;;;;;:::i;:::-;;:::i;:::-;;6174:331:74;;;;;;:::i;:::-;;:::i;830:69:76:-;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;830:69:76;;;;;;-1:-1:-1;;;;;1809:32:105;;;1791:51;;1779:2;1764:18;830:69:76;;;;;;;;442:42;;482:2;442:42;;;;;2025:4:105;2013:17;;;1995:36;;1983:2;1968:18;442:42:76;1853:184:105;396:39:76;;;;;397:48:72;;;;;966:93:76;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2315:25:105;;;2383:14;;2376:22;2371:2;2356:18;;;2349:50;;;;2442:14;;2435:22;2415:18;;;2408:50;;;;2508:13;;2501:21;2494:29;2489:2;2474:18;;2467:57;2571:15;2565:22;2589:4;2561:33;2555:3;2540:19;;2533:62;2302:3;2287:19;966:93:76;2042:559:105;2451:750:74;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4270:1413::-;;;;;;:::i;:::-;;:::i;7324:377::-;;;;;;:::i;:::-;;:::i;1745:120:76:-;1100:13;:11;:13::i;:::-;1829:29:::1;1842:15;1829:12;:29::i;:::-;1745:120:::0;:::o;6174:331:74:-;1100:13:76;:11;:13::i;:::-;6250:20:74::1;6280:17:::0;6307:11:::1;6376:4;6365:42;;;;;;;;;;;;:::i;:::-;6329:78:::0;;-1:-1:-1;6329:78:74;-1:-1:-1;6329:78:74;-1:-1:-1;6418:25:74::1;-1:-1:-1::0;;;;;6418:23:74;::::1;;:25::i;:::-;;6453:45;6466:12;6480:9;6491:6;6453:12;:45::i;:::-;6240:265;;;6174:331:::0;:::o;2451:750::-;2598:12;1100:13:76;:11;:13::i;:::-;2622:14:74::1;2657:27;::::0;;::::1;2668:4:::0;2657:27:::1;:::i;:::-;2695:20;2718:45:::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;2718:45:74::1;2778:52:::0;;;2718:45;2778:52;;;;;;:66:::1;::::0;2646:38;;-1:-1:-1;2718:45:74;2778:66:::1;;2773:123;;2853:43;::::0;-1:-1:-1;;;2853:43:74;;-1:-1:-1;;;;;1809:32:105;;2853:43:74::1;::::0;::::1;1791:51:105::0;1764:18;;2853:43:74::1;;;;;;;;2773:123;-1:-1:-1::0;;;;;2911:52:74;::::1;;::::0;;;:38:::1;:52;::::0;;;;;;;:63:::1;::::0;::::1;::::0;::::1;;;2907:224;;;2990:42;3000:12;3014:9;3025:6;2990:9;:42::i;:::-;2907:224;;;3063:57;3073:12;3087:9;3106:4;3113:6;3063:9;:57::i;:::-;3148:46;3173:12;3187:6;3148:24;:46::i;:::-;3141:53:::0;2451:750;-1:-1:-1;;;;;;;2451:750:74:o;4270:1413::-;4374:12;1100:13:76;:11;:13::i;:::-;4398:30:74::1;4431:34;4448:10;4460:4;;4431:16;:34::i;:::-;4520:24:::0;;-1:-1:-1;;;;;4481:64:74::1;;::::0;;;:38:::1;:64;::::0;;;;;;;:78:::1;::::0;4398:67;;-1:-1:-1;4481:78:74::1;;4476:147;;4598:24:::0;;4568:55:::1;::::0;-1:-1:-1;;;4568:55:74;;-1:-1:-1;;;;;1809:32:105;;;4568:55:74::1;::::0;::::1;1791:51:105::0;1764:18;;4568:55:74::1;1645:203:105::0;4476:147:74::1;4677:24:::0;;-1:-1:-1;;;;;4638:64:74::1;;::::0;;;:38:::1;:64;::::0;;;;;;;:75:::1;::::0;::::1;::::0;::::1;;;4634:326;;;4729:93;4739:11;:24;;;4765:11;:28;;;4795:11;:26;;;4729:9;:93::i;:::-;4634:326;;;4853:96;4866:11;:24;;;4892:11;:28;;;4922:11;:26;;;4853:12;:96::i;:::-;5010:28;4974:11;:32;;;:64;;;;;;;;:::i;:::-;;4970:121;;;5061:19;;::::0;;-1:-1:-1;5054:26:74::1;;4970:121;5141:26;5105:11;:32;;;:62;;;;;;;;:::i;:::-;;5101:472;;;5184:12;5198:19:::0;5237:105:::1;5286:11;:15;;;5303:1;493:3:72;5322:11:74;:19;;;5237:11;:28;;;-1:-1:-1::0;;;;;5237:48:74::1;;;:105;;;;;;;:::i;:::-;5183:159;;;;5361:7;5360:8;:51;;;;;5373:38;5404:6;5373:30;:38::i;:::-;5372:39;5360:51;5356:91;;;5420:27;;-1:-1:-1::0;;;5420:27:74::1;;;;;;;;;;;5356:91;5479:24:::0;;5505:28:::1;::::0;;::::1;::::0;5535:18:::1;::::0;;::::1;::::0;5468:94;;::::1;::::0;5479:24;5535:18;5555:6;;5468:94:::1;;:::i;:::-;;;;;;;;;;;;;5461:101;;;;;;;5101:472;5601:24:::0;;5627:28:::1;::::0;;::::1;::::0;5657:18:::1;::::0;;::::1;::::0;5590:86;;::::1;::::0;5601:24;5657:18;5590:86:::1;-1:-1:-1::0;;;;;6339:15:105;;;6321:34;;6391:15;;;;6386:2;6371:18;;6364:43;6438:2;6423:18;;6416:34;;;;6271:2;6256:18;;6081:375;5590:86:74::1;;;;;;;;;;;;;5583:93;;;1123:1:76;4270:1413:74::0;;;;;:::o;7324:377::-;1100:13:76;:11;:13::i;:::-;7441:31:74::1;:15;-1:-1:-1::0;;;;;7441:29:74::1;;:31::i;:::-;-1:-1:-1::0;2028:33:76;:45;;;;;;;;;;;:63;;-1:-1:-1;;;;;;2028:63:76;-1:-1:-1;;;;;2028:63:76;;;;;;;;2101:55;;-1:-1:-1;2101:55:76;;;;;;;:79;;;2190:69;;:76;;-1:-1:-1;;2276:74:76;;;;;;7538:15:74;;7534:161:::1;;7569:27;7605:12;7612:4:::0;;7605:12:::1;:::i;:::-;7599:19;;7569:49;;7632:52;7645:15;7662:21;7632:12;:52::i;:::-;7555:140;7324:377:::0;;;;:::o;1341:124:76:-;1395:10;-1:-1:-1;;;;;1409:14:76;1395:28;;1387:71;;;;-1:-1:-1;;;1387:71:76;;6984:2:105;1387:71:76;;;6966:21:105;7023:2;7003:18;;;6996:30;7062:32;7042:18;;;7035:60;7112:18;;1387:71:76;6782:354:105;1387:71:76;1341:124::o;2363:285::-;-1:-1:-1;;;;;2434:55:76;;;;;;:38;:55;;;;;;;;:69;;;;2429:129;;2512:46;;-1:-1:-1;;;2512:46:76;;-1:-1:-1;;;;;1809:32:105;;2512:46:76;;;1791:51:105;1764:18;;2512:46:76;1645:203:105;2429:129:76;-1:-1:-1;;;;;2568:55:76;;;;;2637:4;2568:55;;;;;;;;:66;:73;;-1:-1:-1;;2568:73:76;;;;;2363:285::o;303:150:101:-;362:7;-1:-1:-1;;;;;385:18:101;;381:44;;412:13;;-1:-1:-1;;;412:13:101;;;;;;;;;;;381:44;-1:-1:-1;442:4:101;303:150::o;1257:197:53:-;1385:12;1408:39;1385:12;1429:9;1440:6;1408:13;:39::i;2101:194::-;2259:29;;-1:-1:-1;;;2259:29:53;;-1:-1:-1;;;;;7333:32:105;;;2259:29:53;;;7315:51:105;7382:18;;;7375:34;;;2236:12:53;;2259:14;;;;;;7288:18:105;;2259:29:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2190:105;2101:194;;;:::o;792:220::-;932:12;955:50;932:12;980:5;987:9;998:6;955:17;:50::i;4734:637:76:-;-1:-1:-1;;;;;4879:52:76;;4852:24;4879:52;;;:38;:52;;;;;;;;4852:88;;;;;;;;4879:61;;4852:88;;;;;;;;;;;;;;;;;;;;;;4828:12;;4852:88;;4984:329;;5019:9;;;;;;;;;;;;;;;;;;4984:329;482:2;5049:44;;:8;:25;;;:44;;;5045:268;;482:2;5145:8;:25;;;:43;;;;:::i;:::-;5138:51;;:2;:51;:::i;:::-;5128:62;;:6;:62;:::i;:::-;5109:81;;5045:268;;;5275:25;;;;5257:43;;482:2;5257:43;:::i;:::-;5250:51;;:2;:51;:::i;:::-;5240:62;;:6;:62;:::i;:::-;5221:81;;5045:268;5330:34;;;;;;9659:19:105;;;9694:12;5330:34:76;;;;;;;;;;;;5323:41;;;;4734:637;;;;;:::o;2157:2081:72:-;2246:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2246:18:72;2276:14;;2392:36;;;;2403:4;2392:36;:::i;:::-;2349:79;;-1:-1:-1;2349:79:72;-1:-1:-1;2438:41:72;2349:79;2476:2;2438:37;:41::i;:::-;-1:-1:-1;2489:24:72;2538:11;2546:2;2543;2538:4;;:11;:::i;:::-;2524:27;;;:::i;:::-;2563:20;2586:45;;;;;;;;;;;2516:36;;;;;;-1:-1:-1;;;;;;2586:45:72;;;;2666:46;2586:45;2705:6;2666:24;:46::i;:::-;2641:71;-1:-1:-1;2795:2:72;2777:15;;2859:20;2777:15;2959:12;2795:2;2969;2959:12;:::i;:::-;2944:28;;2940:1077;;;3022:4;;3027:7;3022:14;;;;;;;;;:::i;:::-;3011:46;;;;;;;:::i;:::-;2988:69;;-1:-1:-1;2988:69:72;-1:-1:-1;3071:13:72;3082:2;3071:13;;:::i;:::-;;;3108:1;3102:3;:7;:28;;;;;3129:1;3113:13;:17;3102:28;:72;;;;-1:-1:-1;3163:4:72;3135:23;3151:7;3135:13;:23;:::i;:::-;3134:40;;3102:72;3098:909;;;-1:-1:-1;3217:26:72;-1:-1:-1;;;;;3265:38:72;;3261:127;;3346:23;3327:42;;3261:127;3459:67;;;3548:12;3582:14;3624:4;;3629:7;3624:37;3647:13;3637:7;:23;;;;:::i;:::-;3624:37;;;;;;;:::i;:::-;3415:265;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3415:265:72;;;;;;;;;;;;;;-1:-1:-1;;;;;3415:265:72;-1:-1:-1;;;;;;3415:265:72;;;;;;;;;;;-1:-1:-1;3098:909:72;;;-1:-1:-1;3930:44:72;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3930:44:72;-1:-1:-1;;;3930:44:72;;;3798:194;;3742:28;;3798:194;;3830:12;;3864:16;;3902:6;;3930:44;3798:194;;:::i;:::-;;;;;;;;;;;;;3788:204;;3098:909;4034:197;;;;;;;;4059:12;-1:-1:-1;;;;;4034:197:72;;;;;4085:6;4034:197;;;;4105:16;-1:-1:-1;;;;;4034:197:72;;;;;4135:14;4034:197;;;;4163:3;4034:197;;;;4180:20;4034:197;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;4034:197:72;2157:2081;-1:-1:-1;;;;;;;;;;;;2157:2081:72:o;1675:219:53:-;1857:29;;-1:-1:-1;;;1857:29:53;;-1:-1:-1;;;;;7333:32:105;;;1857:29:53;;;7315:51:105;7382:18;;;7375:34;;;1834:12:53;;1857:10;;;;;;7288:18:105;;1857:29:53;7141:274:105;1178:1314:98;1359:4;1365:12;1425:15;1450:13;1473:24;1510:8;1500:19;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1500:19:98;;1473:46;;2021:1;1992;1955:9;1949:16;1917:4;1906:9;1902:20;1863:6;1825:7;1796:4;1774:272;1762:284;;2118:16;2107:27;;2162:8;2153:7;2150:21;2147:76;;;2201:8;2190:19;;2147:76;2308:7;2295:11;2288:28;2428:7;2425:1;2418:4;2405:11;2401:22;2386:50;2463:8;;;;-1:-1:-1;1178:1314:98;-1:-1:-1;;;;;;;1178:1314:98:o;4720:458::-;4870:18;;4788:4;;4870:22;4866:284;;5052:11;5046:18;5110:15;5096:11;5092:2;5088:20;5081:45;4866:284;-1:-1:-1;5166:5:98;;4720:458;-1:-1:-1;4720:458:98:o;3128:396:76:-;-1:-1:-1;;;;;3223:55:76;;;;;;:38;:55;;;;;;;;:69;;;;3218:129;;3301:46;;-1:-1:-1;;;3301:46:76;;-1:-1:-1;;;;;1809:32:105;;3301:46:76;;;1791:51:105;1764:18;;3301:46:76;1645:203:105;3218:129:76;3424:93;;;;;;;;3454:4;3424:93;;;;;;;;;;;;;;-1:-1:-1;;;;;3357:55:76;;;;-1:-1:-1;3357:55:76;;;;;;;;;;;:160;;:64;;;;:160;;;;-1:-1:-1;;3357:160:76;;;;;;-1:-1:-1;;3357:160:76;;;;;;;;;;;;;;;;;3128:396::o;2508:166:53:-;2608:58;;-1:-1:-1;;;;;7333:32:105;;2608:58:53;;;7315:51:105;7382:18;;;7375:34;;;2591:76:53;;2601:5;;-1:-1:-1;;;2631:23:53;7288:18:105;;2608:58:53;;;;-1:-1:-1;;2608:58:53;;;;;;;;;;;;;;-1:-1:-1;;;;;2608:58:53;-1:-1:-1;;;;;;2608:58:53;;;;;;;;;;2591:9;:76::i;:::-;2508:166;;;:::o;2939:193::-;3056:68;;-1:-1:-1;;;;;6339:15:105;;;3056:68:53;;;6321:34:105;6391:15;;6371:18;;;6364:43;6423:18;;;6416:34;;;3039:86:53;;3049:5;;-1:-1:-1;;;3079:27:53;6256:18:105;;3056:68:53;6081:375:105;459:185:101;531:7;564:8;554:6;:18;550:64;;581:33;;-1:-1:-1;;;581:33:101;;;;;11519:25:105;;;11560:18;;;11553:34;;;11492:18;;581:33:101;11345:248:105;550:64:101;-1:-1:-1;631:6:101;;459:185;-1:-1:-1;459:185:101:o;3806:526:76:-;-1:-1:-1;;;;;3946:52:76;;3900:7;3946:52;;;:38;:52;;;;;;;;3919:88;;;;;;;;3946:61;;3919:88;;;;;;;;;;;;;;;;;;;;;;;4017:309;;4059:6;4052:13;;;;;4017:309;482:2;4086:44;;:8;:25;;;:44;;;4082:244;;482:2;4170:8;:25;;;:43;;;;:::i;:::-;4163:51;;:2;:51;:::i;:::-;4153:62;;:6;:62;:::i;:::-;4146:69;;;;;4082:244;4288:25;;;;4270:43;;482:2;4270:43;:::i;:::-;4263:51;;:2;:51;:::i;:::-;4253:62;;:6;:62;:::i;3293:488:53:-;3426:18;;3471:13;3463:47;;;;-1:-1:-1;;;3463:47:53;;11800:2:105;3463:47:53;;;11782:21:105;11839:2;11819:18;;;11812:30;-1:-1:-1;;;11858:18:105;;;11851:51;11919:18;;3463:47:53;11598:345:105;3463:47:53;3522:12;3536:23;3571:5;-1:-1:-1;;;;;3563:19:53;3583:4;3563:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3521:67;;;;3606:7;3598:38;;;;-1:-1:-1;;;3598:38:53;;12429:2:105;3598:38:53;;;12411:21:105;12468:2;12448:18;;;12441:30;-1:-1:-1;;;12487:18:105;;;12480:48;12545:18;;3598:38:53;12227:342:105;3598:38:53;3651:17;;:21;3647:128;;3708:10;3697:30;;;;;;;;;;;;:::i;:::-;3689:75;;;;-1:-1:-1;;;3689:75:53;;13058:2:105;3689:75:53;;;13040:21:105;;;13077:18;;;13070:30;13136:34;13116:18;;;13109:62;13188:18;;3689:75:53;12856:356:105;14:131;-1:-1:-1;;;;;89:31:105;;79:42;;69:70;;135:1;132;125:12;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:127::-;463:10;458:3;454:20;451:1;444:31;494:4;491:1;484:15;518:4;515:1;508:15;534:921;602:6;655:2;643:9;634:7;630:23;626:32;623:52;;;671:1;668;661:12;623:52;711:9;698:23;740:18;781:2;773:6;770:14;767:34;;;797:1;794;787:12;767:34;835:6;824:9;820:22;810:32;;880:7;873:4;869:2;865:13;861:27;851:55;;902:1;899;892:12;851:55;938:2;925:16;960:2;956;953:10;950:36;;;966:18;;:::i;:::-;1041:2;1035:9;1009:2;1095:13;;-1:-1:-1;;1091:22:105;;;1115:2;1087:31;1083:40;1071:53;;;1139:18;;;1159:22;;;1136:46;1133:72;;;1185:18;;:::i;:::-;1225:10;1221:2;1214:22;1260:2;1252:6;1245:18;1300:7;1295:2;1290;1286;1282:11;1278:20;1275:33;1272:53;;;1321:1;1318;1311:12;1272:53;1377:2;1372;1368;1364:11;1359:2;1351:6;1347:15;1334:46;1422:1;1400:15;;;1417:2;1396:24;1389:35;;;;-1:-1:-1;1404:6:105;534:921;-1:-1:-1;;;;;534:921:105:o;1460:180::-;1519:6;1572:2;1560:9;1551:7;1547:23;1543:32;1540:52;;;1588:1;1585;1578:12;1540:52;-1:-1:-1;1611:23:105;;1460:180;-1:-1:-1;1460:180:105:o;2606:347::-;2657:8;2667:6;2721:3;2714:4;2706:6;2702:17;2698:27;2688:55;;2739:1;2736;2729:12;2688:55;-1:-1:-1;2762:20:105;;2805:18;2794:30;;2791:50;;;2837:1;2834;2827:12;2791:50;2874:4;2866:6;2862:17;2850:29;;2926:3;2919:4;2910:6;2902;2898:19;2894:30;2891:39;2888:59;;;2943:1;2940;2933:12;2888:59;2606:347;;;;;:::o;2958:612::-;3046:6;3054;3062;3070;3123:2;3111:9;3102:7;3098:23;3094:32;3091:52;;;3139:1;3136;3129:12;3091:52;3175:9;3162:23;3152:33;;3235:2;3224:9;3220:18;3207:32;3248:31;3273:5;3248:31;:::i;:::-;3298:5;-1:-1:-1;3354:2:105;3339:18;;3326:32;3381:18;3370:30;;3367:50;;;3413:1;3410;3403:12;3367:50;3452:58;3502:7;3493:6;3482:9;3478:22;3452:58;:::i;:::-;2958:612;;;;-1:-1:-1;3529:8:105;-1:-1:-1;;;;2958:612:105:o;3575:258::-;3647:1;3657:113;3671:6;3668:1;3665:13;3657:113;;;3747:11;;;3741:18;3728:11;;;3721:39;3693:2;3686:10;3657:113;;;3788:6;3785:1;3782:13;3779:48;;;-1:-1:-1;;3823:1:105;3805:16;;3798:27;3575:258::o;3838:257::-;3879:3;3917:5;3911:12;3944:6;3939:3;3932:19;3960:63;4016:6;4009:4;4004:3;4000:14;3993:4;3986:5;3982:16;3960:63;:::i;:::-;4077:2;4056:15;-1:-1:-1;;4052:29:105;4043:39;;;;4084:4;4039:50;;3838:257;-1:-1:-1;;3838:257:105:o;4100:217::-;4247:2;4236:9;4229:21;4210:4;4267:44;4307:2;4296:9;4292:18;4284:6;4267:44;:::i;4322:477::-;4401:6;4409;4417;4470:2;4458:9;4449:7;4445:23;4441:32;4438:52;;;4486:1;4483;4476:12;4438:52;4522:9;4509:23;4499:33;;4583:2;4572:9;4568:18;4555:32;4610:18;4602:6;4599:30;4596:50;;;4642:1;4639;4632:12;4596:50;4681:58;4731:7;4722:6;4711:9;4707:22;4681:58;:::i;:::-;4322:477;;4758:8;;-1:-1:-1;4655:84:105;;-1:-1:-1;;;;4322:477:105:o;4804:462::-;4908:6;4916;4924;4977:2;4965:9;4956:7;4952:23;4948:32;4945:52;;;4993:1;4990;4983:12;4945:52;5025:9;5019:16;5044:31;5069:5;5044:31;:::i;:::-;5144:2;5129:18;;5123:25;5094:5;;-1:-1:-1;5157:33:105;5123:25;5157:33;:::i;:::-;5209:7;5199:17;;;5256:2;5245:9;5241:18;5235:25;5225:35;;4804:462;;;;;:::o;5456:127::-;5517:10;5512:3;5508:20;5505:1;5498:31;5548:4;5545:1;5538:15;5572:4;5569:1;5562:15;5588:488;-1:-1:-1;;;;;5857:15:105;;;5839:34;;5909:15;;5904:2;5889:18;;5882:43;5956:2;5941:18;;5934:34;;;6004:3;5999:2;5984:18;;5977:31;;;5782:4;;6025:45;;6050:19;;6042:6;6025:45;:::i;:::-;6017:53;5588:488;-1:-1:-1;;;;;;5588:488:105:o;6461:316::-;-1:-1:-1;;;;;;6581:19:105;;6650:11;;;;6681:1;6673:10;;6670:101;;;6758:2;6752;6745:3;6742:1;6738:11;6735:1;6731:19;6727:28;6723:2;6719:37;6715:46;6706:55;;6670:101;;;6461:316;;;;:::o;7420:127::-;7481:10;7476:3;7472:20;7469:1;7462:31;7512:4;7509:1;7502:15;7536:4;7533:1;7526:15;7552:195;7590:4;7627;7624:1;7620:12;7659:4;7656:1;7652:12;7684:3;7679;7676:12;7673:38;;;7691:18;;:::i;:::-;7728:13;;;7552:195;-1:-1:-1;;;7552:195:105:o;7752:422::-;7841:1;7884:5;7841:1;7898:270;7919:7;7909:8;7906:21;7898:270;;;7978:4;7974:1;7970:6;7966:17;7960:4;7957:27;7954:53;;;7987:18;;:::i;:::-;8037:7;8027:8;8023:22;8020:55;;;8057:16;;;;8020:55;8136:22;;;;8096:15;;;;7898:270;;;7902:3;7752:422;;;;;:::o;8179:806::-;8228:5;8258:8;8248:80;;-1:-1:-1;8299:1:105;8313:5;;8248:80;8347:4;8337:76;;-1:-1:-1;8384:1:105;8398:5;;8337:76;8429:4;8447:1;8442:59;;;;8515:1;8510:130;;;;8422:218;;8442:59;8472:1;8463:10;;8486:5;;;8510:130;8547:3;8537:8;8534:17;8531:43;;;8554:18;;:::i;:::-;-1:-1:-1;;8610:1:105;8596:16;;8625:5;;8422:218;;8724:2;8714:8;8711:16;8705:3;8699:4;8696:13;8692:36;8686:2;8676:8;8673:16;8668:2;8662:4;8659:12;8655:35;8652:77;8649:159;;;-1:-1:-1;8761:19:105;;;8793:5;;8649:159;8840:34;8865:8;8859:4;8840:34;:::i;:::-;8910:6;8906:1;8902:6;8898:19;8889:7;8886:32;8883:58;;;8921:18;;:::i;:::-;8959:20;;8179:806;-1:-1:-1;;;8179:806:105:o;8990:140::-;9048:5;9077:47;9118:4;9108:8;9104:19;9098:4;9077:47;:::i;9135:217::-;9175:1;9201;9191:132;;9245:10;9240:3;9236:20;9233:1;9226:31;9280:4;9277:1;9270:15;9308:4;9305:1;9298:15;9191:132;-1:-1:-1;9337:9:105;;9135:217::o;9357:168::-;9397:7;9463:1;9459;9455:6;9451:14;9448:1;9445:21;9440:1;9433:9;9426:17;9422:45;9419:71;;;9470:18;;:::i;:::-;-1:-1:-1;9510:9:105;;9357:168::o;9717:248::-;9785:6;9793;9846:2;9834:9;9825:7;9821:23;9817:32;9814:52;;;9862:1;9859;9852:12;9814:52;-1:-1:-1;;9885:23:105;;;9955:2;9940:18;;;9927:32;;-1:-1:-1;9717:248:105:o;9970:331::-;10075:9;10086;10128:8;10116:10;10113:24;10110:44;;;10150:1;10147;10140:12;10110:44;10179:6;10169:8;10166:20;10163:40;;;10199:1;10196;10189:12;10163:40;-1:-1:-1;;10225:23:105;;;10270:25;;;;;-1:-1:-1;9970:331:105:o;10306:337::-;-1:-1:-1;;10427:19:105;;10514:11;;;;10545:2;10537:11;;10534:103;;;10607:2;10603:12;;;;10600:1;10596:20;10592:29;;;10584:38;10580:47;;;;10306:337;-1:-1:-1;;10306:337:105:o;10648:128::-;10688:3;10719:1;10715:6;10712:1;10709:13;10706:39;;;10725:18;;:::i;:::-;-1:-1:-1;10761:9:105;;10648:128::o;10781:559::-;-1:-1:-1;;;;;10994:32:105;;10976:51;;11058:2;11043:18;;11036:34;;;11106:2;11101;11086:18;;11079:30;;;11125:18;;11118:34;;;11145:6;11195;11189:3;11174:19;;11161:49;11260:1;11230:22;;;11254:3;11226:32;;;11219:43;;;;11323:2;11302:15;;;-1:-1:-1;;11298:29:105;11283:45;11279:55;;10781:559;-1:-1:-1;;;10781:559:105:o;11948:274::-;12077:3;12115:6;12109:13;12131:53;12177:6;12172:3;12165:4;12157:6;12153:17;12131:53;:::i;:::-;12200:16;;;;;11948:274;-1:-1:-1;;11948:274:105:o;12574:277::-;12641:6;12694:2;12682:9;12673:7;12669:23;12665:32;12662:52;;;12710:1;12707;12700:12;12662:52;12742:9;12736:16;12795:5;12788:13;12781:21;12774:5;12771:32;12761:60;;12817:1;12814;12807:12",
  "source": "// The Licensed Work is (c) 2022 Sygma\n// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity 0.8.11;\n\nimport \"../interfaces/IHandler.sol\";\nimport \"./ERCHandlerHelpers.sol\";\nimport \"./DepositDataHelper.sol\";\nimport \"../ERC20Safe.sol\";\nimport \"../utils/ExcessivelySafeCall.sol\";\n\n/**\n    @title Handles ERC20 deposits and deposit executions.\n    @author ChainSafe Systems.\n    @notice This contract is intended to be used with the Bridge contract.\n */\ncontract ERC20Handler is IHandler, ERCHandlerHelpers, DepositDataHelper, ERC20Safe {\n    using SanityChecks for *;\n    using ExcessivelySafeCall for address;\n\n    error OptionalMessageCallFailed();\n\n    /**\n        @param bridgeAddress Contract address of previously deployed Bridge.\n        @param defaultMessageReceiver Contract address of previously deployed DefaultMessageReceiver.\n     */\n    constructor(\n        address bridgeAddress,\n        address defaultMessageReceiver\n    ) DepositDataHelper(bridgeAddress, defaultMessageReceiver) {}\n\n    /**\n        @notice A deposit is initiated by making a deposit in the Bridge contract.\n        @param resourceID ResourceID used to find address of token to be used for deposit.\n        @param depositor Address of account making the deposit in the Bridge contract.\n        @param data Consists of {amount}, {recipient}, {optionalGas}, {optionalMessage},\n        padded to 32 bytes.\n        @notice Data passed into the function should be constructed as follows:\n        amount                             uint256 bytes  0 - 32\n        destinationRecipientAddress length uint256 bytes 32 - 64\n        destinationRecipientAddress        bytes   bytes 64 - (64 + len(destinationRecipientAddress))\n        optionalGas                        uint256 bytes (64 + len(destinationRecipientAddress)) - (96 + len(destinationRecipientAddress))\n        optionalMessage             length uint256 bytes (96 + len(destinationRecipientAddress)) - (128 + len(destinationRecipientAddress))\n        optionalMessage                    bytes   bytes (160 + len(destinationRecipientAddress)) - END\n        @dev Depending if the corresponding {tokenAddress} for the parsed {resourceID} is\n        marked true in {_tokenContractAddressToTokenProperties[tokenAddress].isBurnable}, deposited tokens will be burned, if not, they will be locked.\n        @return 32-length byte array with internal bridge amount OR empty byte array if conversion is not needed.\n     */\n    function deposit(\n        bytes32 resourceID,\n        address depositor,\n        bytes   calldata data\n    ) external override onlyBridge returns (bytes memory) {\n        uint256 amount;\n        (amount) = abi.decode(data, (uint256));\n\n        address tokenAddress = _resourceIDToTokenContractAddress[resourceID];\n        if (!_tokenContractAddressToTokenProperties[tokenAddress].isWhitelisted) revert ContractAddressNotWhitelisted(tokenAddress);\n\n        if (_tokenContractAddressToTokenProperties[tokenAddress].isBurnable) {\n            burnERC20(tokenAddress, depositor, amount);\n        } else {\n            lockERC20(tokenAddress, depositor, address(this), amount);\n        }\n\n        return convertToInternalBalance(tokenAddress, amount);\n    }\n\n    /**\n        @notice Proposal execution should be initiated when a proposal is finalized in the Bridge contract.\n        by a relayer on the deposit's destination chain.\n        @param resourceID ResourceID to be used when making deposits.\n        @param data Consists of {amount}, {recipient}, {optionalGas}, {optionalMessage},\n        padded to 32 bytes.\n        @notice Data passed into the function should be constructed as follows:\n        amount                             uint256 bytes  0 - 32\n        destinationRecipientAddress length uint256 bytes 32 - 64\n        destinationRecipientAddress        bytes   bytes 64 - (64 + len(destinationRecipientAddress))\n        optionalGas                        uint256 bytes (64 + len(destinationRecipientAddress)) - (96 + len(destinationRecipientAddress))\n        optionalMessage             length uint256 bytes (96 + len(destinationRecipientAddress)) - (128 + len(destinationRecipientAddress))\n        optionalMessage                    bytes   bytes (160 + len(destinationRecipientAddress)) - END\n     */\n    function executeProposal(bytes32 resourceID, bytes calldata data) external override onlyBridge returns (bytes memory) {\n        DepositData memory depositData = parseDepositData(resourceID, data);\n\n        if (!_tokenContractAddressToTokenProperties[depositData.tokenAddress].isWhitelisted) revert ContractAddressNotWhitelisted(depositData.tokenAddress);\n\n        if (_tokenContractAddressToTokenProperties[depositData.tokenAddress].isBurnable) {\n            mintERC20(depositData.tokenAddress, depositData.recipientAddress, depositData.externalAmount);\n        } else {\n            releaseERC20(depositData.tokenAddress, depositData.recipientAddress, depositData.externalAmount);\n        }\n\n        if (depositData.optionalMessageCheck == OptionalMessageCheck.Invalid) {\n            return depositData.message;\n        }\n\n        if (depositData.optionalMessageCheck == OptionalMessageCheck.Valid) {\n            (bool success, bytes memory result) =\n                depositData.recipientAddress.excessivelySafeCall(depositData.gas, 0, maxReturnBytes, depositData.message);\n            if (!success && !ExcessivelySafeCall.revertWith(result)) revert OptionalMessageCallFailed();\n            return abi.encode(depositData.tokenAddress, depositData.recipientAddress, depositData.amount, result);\n        }\n\n        return abi.encode(depositData.tokenAddress, depositData.recipientAddress, depositData.amount);\n    }\n\n    /**\n        @notice Used to manually release ERC20 tokens from ERC20Safe.\n        @param data Consists of {tokenAddress}, {recipient}, and {amount} all padded to 32 bytes.\n        @notice Data passed into the function should be constructed as follows:\n        tokenAddress                           address     bytes  0 - 32\n        recipient                              address     bytes  32 - 64\n        amount                                 uint        bytes  64 - 96\n     */\n    function withdraw(bytes memory data) external override onlyBridge {\n        address tokenAddress;\n        address recipient;\n        uint amount;\n\n        (tokenAddress, recipient, amount) = abi.decode(data, (address, address, uint));\n\n        recipient.mustNotBeZero();\n        releaseERC20(tokenAddress, recipient, amount);\n    }\n\n    /**\n        @notice Sets {_resourceIDToContractAddress} with {contractAddress},\n        {_tokenContractAddressToTokenProperties[tokenAddress].resourceID} with {resourceID} and\n        {_tokenContractAddressToTokenProperties[tokenAddress].isWhitelisted} to true for {contractAddress} in ERCHandlerHelpers contract.\n        Sets decimals value for contractAddress if value is provided in args.\n        @param resourceID ResourceID to be used when making deposits.\n        @param contractAddress Address of contract to be called when a deposit is made and a deposited is executed.\n        @param args Byte array which is either empty if the token contract decimals are the same as the bridge defaultDecimals,\n                    or has a first byte set to the uint8 decimals value of the token contract.\n     */\n    function setResource(bytes32 resourceID, address contractAddress, bytes calldata args) external onlyBridge {\n        contractAddress.mustNotBeZero();\n        _setResource(resourceID, contractAddress);\n\n        if (args.length > 0) {\n            uint8 externalTokenDecimals = uint8(bytes1(args));\n            _setDecimals(contractAddress, externalTokenDecimals);\n        }\n    }\n}\n",
  "sourcePath": "/home/runner/work/sygma-solidity/sygma-solidity/contracts/handlers/ERC20Handler.sol",
  "ast": {
    "absolutePath": "project:/contracts/handlers/ERC20Handler.sol",
    "exportedSymbols": {
      "AccessControl": [
        308
      ],
      "AccessControlEnumerable": [
        433
      ],
      "Context": [
        5305
      ],
      "DepositDataHelper": [
        13577
      ],
      "ERC165": [
        6167
      ],
      "ERC20": [
        2990
      ],
      "ERC20Burnable": [
        3112
      ],
      "ERC20Handler": [
        14263
      ],
      "ERC20Pausable": [
        3149
      ],
      "ERC20PresetMinterPauser": [
        3515
      ],
      "ERC20Safe": [
        9222
      ],
      "ERCHandlerHelpers": [
        14917
      ],
      "EnumerableSet": [
        7373
      ],
      "ExcessivelySafeCall": [
        18825
      ],
      "IAccessControl": [
        506
      ],
      "IAccessControlEnumerable": [
        531
      ],
      "IERC165": [
        6381
      ],
      "IERC20": [
        3068
      ],
      "IERC20Metadata": [
        3174
      ],
      "IERCHandler": [
        18195
      ],
      "IHandler": [
        18301
      ],
      "ISygmaMessageReceiver": [
        18315
      ],
      "Pausable": [
        728
      ],
      "SanityChecks": [
        19158
      ],
      "Strings": [
        5582
      ]
    },
    "id": 14264,
    "license": "LGPL-3.0-only",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 13938,
        "literals": [
          "solidity",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "81:23:74"
      },
      {
        "absolutePath": "project:/contracts/interfaces/IHandler.sol",
        "file": "../interfaces/IHandler.sol",
        "id": 13939,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14264,
        "sourceUnit": 18302,
        "src": "106:36:74",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/handlers/ERCHandlerHelpers.sol",
        "file": "./ERCHandlerHelpers.sol",
        "id": 13940,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14264,
        "sourceUnit": 14918,
        "src": "143:33:74",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/handlers/DepositDataHelper.sol",
        "file": "./DepositDataHelper.sol",
        "id": 13941,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14264,
        "sourceUnit": 13578,
        "src": "177:33:74",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/ERC20Safe.sol",
        "file": "../ERC20Safe.sol",
        "id": 13942,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14264,
        "sourceUnit": 9223,
        "src": "211:26:74",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/ExcessivelySafeCall.sol",
        "file": "../utils/ExcessivelySafeCall.sol",
        "id": 13943,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14264,
        "sourceUnit": 18826,
        "src": "238:42:74",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 13945,
              "name": "IHandler",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 18301,
              "src": "479:8:74"
            },
            "id": 13946,
            "nodeType": "InheritanceSpecifier",
            "src": "479:8:74"
          },
          {
            "baseName": {
              "id": 13947,
              "name": "ERCHandlerHelpers",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 14917,
              "src": "489:17:74"
            },
            "id": 13948,
            "nodeType": "InheritanceSpecifier",
            "src": "489:17:74"
          },
          {
            "baseName": {
              "id": 13949,
              "name": "DepositDataHelper",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 13577,
              "src": "508:17:74"
            },
            "id": 13950,
            "nodeType": "InheritanceSpecifier",
            "src": "508:17:74"
          },
          {
            "baseName": {
              "id": 13951,
              "name": "ERC20Safe",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 9222,
              "src": "527:9:74"
            },
            "id": 13952,
            "nodeType": "InheritanceSpecifier",
            "src": "527:9:74"
          }
        ],
        "canonicalName": "ERC20Handler",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 13944,
          "nodeType": "StructuredDocumentation",
          "src": "282:171:74",
          "text": "@title Handles ERC20 deposits and deposit executions.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with the Bridge contract."
        },
        "fullyImplemented": true,
        "id": 14263,
        "linearizedBaseContracts": [
          14263,
          9222,
          13577,
          14917,
          18195,
          18301
        ],
        "name": "ERC20Handler",
        "nameLocation": "463:12:74",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 13954,
            "libraryName": {
              "id": 13953,
              "name": "SanityChecks",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 19158,
              "src": "549:12:74"
            },
            "nodeType": "UsingForDirective",
            "src": "543:25:74"
          },
          {
            "id": 13957,
            "libraryName": {
              "id": 13955,
              "name": "ExcessivelySafeCall",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 18825,
              "src": "579:19:74"
            },
            "nodeType": "UsingForDirective",
            "src": "573:38:74",
            "typeName": {
              "id": 13956,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "603:7:74",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 13959,
            "name": "OptionalMessageCallFailed",
            "nameLocation": "623:25:74",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 13958,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "648:2:74"
            },
            "src": "617:34:74"
          },
          {
            "body": {
              "id": 13971,
              "nodeType": "Block",
              "src": "998:2:74",
              "statements": []
            },
            "documentation": {
              "id": 13960,
              "nodeType": "StructuredDocumentation",
              "src": "657:190:74",
              "text": "@param bridgeAddress Contract address of previously deployed Bridge.\n@param defaultMessageReceiver Contract address of previously deployed DefaultMessageReceiver."
            },
            "id": 13972,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 13967,
                    "name": "bridgeAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13962,
                    "src": "959:13:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "id": 13968,
                    "name": "defaultMessageReceiver",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13964,
                    "src": "974:22:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13969,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 13966,
                  "name": "DepositDataHelper",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 13577,
                  "src": "941:17:74"
                },
                "nodeType": "ModifierInvocation",
                "src": "941:56:74"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13965,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13962,
                  "mutability": "mutable",
                  "name": "bridgeAddress",
                  "nameLocation": "881:13:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 13972,
                  "src": "873:21:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13961,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "873:7:74",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13964,
                  "mutability": "mutable",
                  "name": "defaultMessageReceiver",
                  "nameLocation": "912:22:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 13972,
                  "src": "904:30:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13963,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "904:7:74",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "863:77:74"
            },
            "returnParameters": {
              "id": 13970,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "998:0:74"
            },
            "scope": 14263,
            "src": "852:148:74",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              18280
            ],
            "body": {
              "id": 14045,
              "nodeType": "Block",
              "src": "2612:589:74",
              "statements": [
                {
                  "assignments": [
                    13988
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13988,
                      "mutability": "mutable",
                      "name": "amount",
                      "nameLocation": "2630:6:74",
                      "nodeType": "VariableDeclaration",
                      "scope": 14045,
                      "src": "2622:14:74",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13987,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2622:7:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 13989,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2622:14:74"
                },
                {
                  "expression": {
                    "id": 13999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 13990,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13988,
                          "src": "2647:6:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 13991,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "2646:8:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 13994,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13979,
                          "src": "2668:4:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 13996,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2675:7:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 13995,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2675:7:74",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 13997,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2674:9:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        ],
                        "expression": {
                          "id": 13992,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967295,
                          "src": "2657:3:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 13993,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "2657:10:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 13998,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2657:27:74",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2646:38:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14000,
                  "nodeType": "ExpressionStatement",
                  "src": "2646:38:74"
                },
                {
                  "assignments": [
                    14002
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14002,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nameLocation": "2703:12:74",
                      "nodeType": "VariableDeclaration",
                      "scope": 14045,
                      "src": "2695:20:74",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14001,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2695:7:74",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14006,
                  "initialValue": {
                    "baseExpression": {
                      "id": 14003,
                      "name": "_resourceIDToTokenContractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14651,
                      "src": "2718:33:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 14005,
                    "indexExpression": {
                      "id": 14004,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13975,
                      "src": "2752:10:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2718:45:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2695:68:74"
                },
                {
                  "condition": {
                    "id": 14011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "2777:67:74",
                    "subExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 14007,
                          "name": "_tokenContractAddressToTokenProperties",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14656,
                          "src": "2778:38:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ERCTokenContractProperties_$14643_storage_$",
                            "typeString": "mapping(address => struct ERCHandlerHelpers.ERCTokenContractProperties storage ref)"
                          }
                        },
                        "id": 14009,
                        "indexExpression": {
                          "id": 14008,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14002,
                          "src": "2817:12:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2778:52:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ERCTokenContractProperties_$14643_storage",
                          "typeString": "struct ERCHandlerHelpers.ERCTokenContractProperties storage ref"
                        }
                      },
                      "id": 14010,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isWhitelisted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14637,
                      "src": "2778:66:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14016,
                  "nodeType": "IfStatement",
                  "src": "2773:123:74",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "id": 14013,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14002,
                          "src": "2883:12:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 14012,
                        "name": "ContractAddressNotWhitelisted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14647,
                        "src": "2853:29:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                          "typeString": "function (address) pure"
                        }
                      },
                      "id": 14014,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2853:43:74",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 14015,
                    "nodeType": "RevertStatement",
                    "src": "2846:50:74"
                  }
                },
                {
                  "condition": {
                    "expression": {
                      "baseExpression": {
                        "id": 14017,
                        "name": "_tokenContractAddressToTokenProperties",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14656,
                        "src": "2911:38:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ERCTokenContractProperties_$14643_storage_$",
                          "typeString": "mapping(address => struct ERCHandlerHelpers.ERCTokenContractProperties storage ref)"
                        }
                      },
                      "id": 14019,
                      "indexExpression": {
                        "id": 14018,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14002,
                        "src": "2950:12:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2911:52:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ERCTokenContractProperties_$14643_storage",
                        "typeString": "struct ERCHandlerHelpers.ERCTokenContractProperties storage ref"
                      }
                    },
                    "id": 14020,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isBurnable",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 14639,
                    "src": "2911:63:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 14038,
                    "nodeType": "Block",
                    "src": "3049:82:74",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14029,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14002,
                              "src": "3073:12:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14030,
                              "name": "depositor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13977,
                              "src": "3087:9:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 14033,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967268,
                                  "src": "3106:4:74",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20Handler_$14263",
                                    "typeString": "contract ERC20Handler"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_ERC20Handler_$14263",
                                    "typeString": "contract ERC20Handler"
                                  }
                                ],
                                "id": 14032,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3098:7:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 14031,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3098:7:74",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 14034,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3098:13:74",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14035,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13988,
                              "src": "3113:6:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 14028,
                            "name": "lockERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9041,
                            "src": "3063:9:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 14036,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3063:57:74",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14037,
                        "nodeType": "ExpressionStatement",
                        "src": "3063:57:74"
                      }
                    ]
                  },
                  "id": 14039,
                  "nodeType": "IfStatement",
                  "src": "2907:224:74",
                  "trueBody": {
                    "id": 14027,
                    "nodeType": "Block",
                    "src": "2976:67:74",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14022,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14002,
                              "src": "3000:12:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14023,
                              "name": "depositor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13977,
                              "src": "3014:9:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14024,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13988,
                              "src": "3025:6:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 14021,
                            "name": "burnERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9115,
                            "src": "2990:9:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 14025,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2990:42:74",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14026,
                        "nodeType": "ExpressionStatement",
                        "src": "2990:42:74"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14041,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14002,
                        "src": "3173:12:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14042,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13988,
                        "src": "3187:6:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14040,
                      "name": "convertToInternalBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14916,
                      "src": "3148:24:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (address,uint256) view returns (bytes memory)"
                      }
                    },
                    "id": 14043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3148:46:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 13986,
                  "id": 14044,
                  "nodeType": "Return",
                  "src": "3141:53:74"
                }
              ]
            },
            "documentation": {
              "id": 13973,
              "nodeType": "StructuredDocumentation",
              "src": "1006:1440:74",
              "text": "@notice A deposit is initiated by making a deposit in the Bridge contract.\n@param resourceID ResourceID used to find address of token to be used for deposit.\n@param depositor Address of account making the deposit in the Bridge contract.\n@param data Consists of {amount}, {recipient}, {optionalGas}, {optionalMessage},\npadded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\namount                             uint256 bytes  0 - 32\ndestinationRecipientAddress length uint256 bytes 32 - 64\ndestinationRecipientAddress        bytes   bytes 64 - (64 + len(destinationRecipientAddress))\noptionalGas                        uint256 bytes (64 + len(destinationRecipientAddress)) - (96 + len(destinationRecipientAddress))\noptionalMessage             length uint256 bytes (96 + len(destinationRecipientAddress)) - (128 + len(destinationRecipientAddress))\noptionalMessage                    bytes   bytes (160 + len(destinationRecipientAddress)) - END\n@dev Depending if the corresponding {tokenAddress} for the parsed {resourceID} is\nmarked true in {_tokenContractAddressToTokenProperties[tokenAddress].isBurnable}, deposited tokens will be burned, if not, they will be locked.\n@return 32-length byte array with internal bridge amount OR empty byte array if conversion is not needed."
            },
            "functionSelector": "b07e54bb",
            "id": 14046,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 13983,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 13982,
                  "name": "onlyBridge",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14663,
                  "src": "2578:10:74"
                },
                "nodeType": "ModifierInvocation",
                "src": "2578:10:74"
              }
            ],
            "name": "deposit",
            "nameLocation": "2460:7:74",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13981,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2569:8:74"
            },
            "parameters": {
              "id": 13980,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13975,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "2485:10:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14046,
                  "src": "2477:18:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13974,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2477:7:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13977,
                  "mutability": "mutable",
                  "name": "depositor",
                  "nameLocation": "2513:9:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14046,
                  "src": "2505:17:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13976,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2505:7:74",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13979,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "2549:4:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14046,
                  "src": "2532:21:74",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13978,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2532:5:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2467:92:74"
            },
            "returnParameters": {
              "id": 13986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13985,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14046,
                  "src": "2598:12:74",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13984,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2598:5:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2597:14:74"
            },
            "scope": 14263,
            "src": "2451:750:74",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              18290
            ],
            "body": {
              "id": 14170,
              "nodeType": "Block",
              "src": "4388:1295:74",
              "statements": [
                {
                  "assignments": [
                    14061
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14061,
                      "mutability": "mutable",
                      "name": "depositData",
                      "nameLocation": "4417:11:74",
                      "nodeType": "VariableDeclaration",
                      "scope": 14170,
                      "src": "4398:30:74",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                        "typeString": "struct DepositDataHelper.DepositData"
                      },
                      "typeName": {
                        "id": 14060,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 14059,
                          "name": "DepositData",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 13365,
                          "src": "4398:11:74"
                        },
                        "referencedDeclaration": 13365,
                        "src": "4398:11:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_DepositData_$13365_storage_ptr",
                          "typeString": "struct DepositDataHelper.DepositData"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14066,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 14063,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14049,
                        "src": "4448:10:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 14064,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14051,
                        "src": "4460:4:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 14062,
                      "name": "parseDepositData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13576,
                      "src": "4431:16:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes_calldata_ptr_$returns$_t_struct$_DepositData_$13365_memory_ptr_$",
                        "typeString": "function (bytes32,bytes calldata) view returns (struct DepositDataHelper.DepositData memory)"
                      }
                    },
                    "id": 14065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4431:34:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                      "typeString": "struct DepositDataHelper.DepositData memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4398:67:74"
                },
                {
                  "condition": {
                    "id": 14072,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "4480:79:74",
                    "subExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 14067,
                          "name": "_tokenContractAddressToTokenProperties",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14656,
                          "src": "4481:38:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ERCTokenContractProperties_$14643_storage_$",
                            "typeString": "mapping(address => struct ERCHandlerHelpers.ERCTokenContractProperties storage ref)"
                          }
                        },
                        "id": 14070,
                        "indexExpression": {
                          "expression": {
                            "id": 14068,
                            "name": "depositData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14061,
                            "src": "4520:11:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                              "typeString": "struct DepositDataHelper.DepositData memory"
                            }
                          },
                          "id": 14069,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "tokenAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 13351,
                          "src": "4520:24:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4481:64:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ERCTokenContractProperties_$14643_storage",
                          "typeString": "struct ERCHandlerHelpers.ERCTokenContractProperties storage ref"
                        }
                      },
                      "id": 14071,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isWhitelisted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14637,
                      "src": "4481:78:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14078,
                  "nodeType": "IfStatement",
                  "src": "4476:147:74",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 14074,
                            "name": "depositData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14061,
                            "src": "4598:11:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                              "typeString": "struct DepositDataHelper.DepositData memory"
                            }
                          },
                          "id": 14075,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "tokenAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 13351,
                          "src": "4598:24:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 14073,
                        "name": "ContractAddressNotWhitelisted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14647,
                        "src": "4568:29:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                          "typeString": "function (address) pure"
                        }
                      },
                      "id": 14076,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4568:55:74",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 14077,
                    "nodeType": "RevertStatement",
                    "src": "4561:62:74"
                  }
                },
                {
                  "condition": {
                    "expression": {
                      "baseExpression": {
                        "id": 14079,
                        "name": "_tokenContractAddressToTokenProperties",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14656,
                        "src": "4638:38:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ERCTokenContractProperties_$14643_storage_$",
                          "typeString": "mapping(address => struct ERCHandlerHelpers.ERCTokenContractProperties storage ref)"
                        }
                      },
                      "id": 14082,
                      "indexExpression": {
                        "expression": {
                          "id": 14080,
                          "name": "depositData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14061,
                          "src": "4677:11:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                            "typeString": "struct DepositDataHelper.DepositData memory"
                          }
                        },
                        "id": 14081,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tokenAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 13351,
                        "src": "4677:24:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4638:64:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ERCTokenContractProperties_$14643_storage",
                        "typeString": "struct ERCHandlerHelpers.ERCTokenContractProperties storage ref"
                      }
                    },
                    "id": 14083,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isBurnable",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 14639,
                    "src": "4638:75:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 14103,
                    "nodeType": "Block",
                    "src": "4839:121:74",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 14095,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "4866:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14096,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tokenAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13351,
                              "src": "4866:24:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 14097,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "4892:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14098,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "recipientAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13355,
                              "src": "4892:28:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 14099,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "4922:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14100,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "externalAmount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13357,
                              "src": "4922:26:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 14094,
                            "name": "releaseERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9065,
                            "src": "4853:12:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 14101,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4853:96:74",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14102,
                        "nodeType": "ExpressionStatement",
                        "src": "4853:96:74"
                      }
                    ]
                  },
                  "id": 14104,
                  "nodeType": "IfStatement",
                  "src": "4634:326:74",
                  "trueBody": {
                    "id": 14093,
                    "nodeType": "Block",
                    "src": "4715:118:74",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 14085,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "4739:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14086,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tokenAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13351,
                              "src": "4739:24:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 14087,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "4765:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14088,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "recipientAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13355,
                              "src": "4765:28:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 14089,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "4795:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14090,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "externalAmount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13357,
                              "src": "4795:26:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 14084,
                            "name": "mintERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9090,
                            "src": "4729:9:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 14091,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4729:93:74",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14092,
                        "nodeType": "ExpressionStatement",
                        "src": "4729:93:74"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_enum$_OptionalMessageCheck_$13349",
                      "typeString": "enum DepositDataHelper.OptionalMessageCheck"
                    },
                    "id": 14109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 14105,
                        "name": "depositData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14061,
                        "src": "4974:11:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                          "typeString": "struct DepositDataHelper.DepositData memory"
                        }
                      },
                      "id": 14106,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "optionalMessageCheck",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13362,
                      "src": "4974:32:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_OptionalMessageCheck_$13349",
                        "typeString": "enum DepositDataHelper.OptionalMessageCheck"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "id": 14107,
                        "name": "OptionalMessageCheck",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13349,
                        "src": "5010:20:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_OptionalMessageCheck_$13349_$",
                          "typeString": "type(enum DepositDataHelper.OptionalMessageCheck)"
                        }
                      },
                      "id": 14108,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Invalid",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13348,
                      "src": "5010:28:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_OptionalMessageCheck_$13349",
                        "typeString": "enum DepositDataHelper.OptionalMessageCheck"
                      }
                    },
                    "src": "4974:64:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14114,
                  "nodeType": "IfStatement",
                  "src": "4970:121:74",
                  "trueBody": {
                    "id": 14113,
                    "nodeType": "Block",
                    "src": "5040:51:74",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 14110,
                            "name": "depositData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14061,
                            "src": "5061:11:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                              "typeString": "struct DepositDataHelper.DepositData memory"
                            }
                          },
                          "id": 14111,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "message",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 13364,
                          "src": "5061:19:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 14058,
                        "id": 14112,
                        "nodeType": "Return",
                        "src": "5054:26:74"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_enum$_OptionalMessageCheck_$13349",
                      "typeString": "enum DepositDataHelper.OptionalMessageCheck"
                    },
                    "id": 14119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 14115,
                        "name": "depositData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14061,
                        "src": "5105:11:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                          "typeString": "struct DepositDataHelper.DepositData memory"
                        }
                      },
                      "id": 14116,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "optionalMessageCheck",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13362,
                      "src": "5105:32:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_OptionalMessageCheck_$13349",
                        "typeString": "enum DepositDataHelper.OptionalMessageCheck"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "id": 14117,
                        "name": "OptionalMessageCheck",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13349,
                        "src": "5141:20:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_OptionalMessageCheck_$13349_$",
                          "typeString": "type(enum DepositDataHelper.OptionalMessageCheck)"
                        }
                      },
                      "id": 14118,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Valid",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13347,
                      "src": "5141:26:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_OptionalMessageCheck_$13349",
                        "typeString": "enum DepositDataHelper.OptionalMessageCheck"
                      }
                    },
                    "src": "5105:62:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14159,
                  "nodeType": "IfStatement",
                  "src": "5101:472:74",
                  "trueBody": {
                    "id": 14158,
                    "nodeType": "Block",
                    "src": "5169:404:74",
                    "statements": [
                      {
                        "assignments": [
                          14121,
                          14123
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 14121,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "5189:7:74",
                            "nodeType": "VariableDeclaration",
                            "scope": 14158,
                            "src": "5184:12:74",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 14120,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "5184:4:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 14123,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "5211:6:74",
                            "nodeType": "VariableDeclaration",
                            "scope": 14158,
                            "src": "5198:19:74",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 14122,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "5198:5:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 14134,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 14127,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "5286:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14128,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "gas",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13359,
                              "src": "5286:15:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 14129,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5303:1:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "id": 14130,
                              "name": "maxReturnBytes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13339,
                              "src": "5306:14:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            {
                              "expression": {
                                "id": 14131,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "5322:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14132,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "message",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13364,
                              "src": "5322:19:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "expression": {
                                "id": 14124,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "5237:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14125,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "recipientAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13355,
                              "src": "5237:28:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 14126,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "excessivelySafeCall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18771,
                            "src": "5237:48:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint16_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$bound_to$_t_address_$",
                              "typeString": "function (address,uint256,uint256,uint16,bytes memory) returns (bool,bytes memory)"
                            }
                          },
                          "id": 14133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5237:105:74",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5183:159:74"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 14142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 14136,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "5360:8:74",
                            "subExpression": {
                              "id": 14135,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14121,
                              "src": "5361:7:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "id": 14141,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "5372:39:74",
                            "subExpression": {
                              "arguments": [
                                {
                                  "id": 14139,
                                  "name": "result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14123,
                                  "src": "5404:6:74",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "expression": {
                                  "id": 14137,
                                  "name": "ExcessivelySafeCall",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18825,
                                  "src": "5373:19:74",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_ExcessivelySafeCall_$18825_$",
                                    "typeString": "type(library ExcessivelySafeCall)"
                                  }
                                },
                                "id": 14138,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "revertWith",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18824,
                                "src": "5373:30:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$",
                                  "typeString": "function (bytes memory) pure returns (bool)"
                                }
                              },
                              "id": 14140,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5373:38:74",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "5360:51:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 14146,
                        "nodeType": "IfStatement",
                        "src": "5356:91:74",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 14143,
                              "name": "OptionalMessageCallFailed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13959,
                              "src": "5420:25:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 14144,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5420:27:74",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 14145,
                          "nodeType": "RevertStatement",
                          "src": "5413:34:74"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 14149,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "5479:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14150,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tokenAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13351,
                              "src": "5479:24:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 14151,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "5505:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14152,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "recipientAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13355,
                              "src": "5505:28:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 14153,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "5535:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14154,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13353,
                              "src": "5535:18:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 14155,
                              "name": "result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14123,
                              "src": "5555:6:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 14147,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967295,
                              "src": "5468:3:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 14148,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encode",
                            "nodeType": "MemberAccess",
                            "src": "5468:10:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 14156,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5468:94:74",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 14058,
                        "id": 14157,
                        "nodeType": "Return",
                        "src": "5461:101:74"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 14162,
                          "name": "depositData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14061,
                          "src": "5601:11:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                            "typeString": "struct DepositDataHelper.DepositData memory"
                          }
                        },
                        "id": 14163,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tokenAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 13351,
                        "src": "5601:24:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 14164,
                          "name": "depositData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14061,
                          "src": "5627:11:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                            "typeString": "struct DepositDataHelper.DepositData memory"
                          }
                        },
                        "id": 14165,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "recipientAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 13355,
                        "src": "5627:28:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 14166,
                          "name": "depositData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14061,
                          "src": "5657:11:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                            "typeString": "struct DepositDataHelper.DepositData memory"
                          }
                        },
                        "id": 14167,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 13353,
                        "src": "5657:18:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 14160,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "5590:3:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 14161,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encode",
                      "nodeType": "MemberAccess",
                      "src": "5590:10:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 14168,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5590:86:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 14058,
                  "id": 14169,
                  "nodeType": "Return",
                  "src": "5583:93:74"
                }
              ]
            },
            "documentation": {
              "id": 14047,
              "nodeType": "StructuredDocumentation",
              "src": "3207:1058:74",
              "text": "@notice Proposal execution should be initiated when a proposal is finalized in the Bridge contract.\nby a relayer on the deposit's destination chain.\n@param resourceID ResourceID to be used when making deposits.\n@param data Consists of {amount}, {recipient}, {optionalGas}, {optionalMessage},\npadded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\namount                             uint256 bytes  0 - 32\ndestinationRecipientAddress length uint256 bytes 32 - 64\ndestinationRecipientAddress        bytes   bytes 64 - (64 + len(destinationRecipientAddress))\noptionalGas                        uint256 bytes (64 + len(destinationRecipientAddress)) - (96 + len(destinationRecipientAddress))\noptionalMessage             length uint256 bytes (96 + len(destinationRecipientAddress)) - (128 + len(destinationRecipientAddress))\noptionalMessage                    bytes   bytes (160 + len(destinationRecipientAddress)) - END"
            },
            "functionSelector": "e248cff2",
            "id": 14171,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14055,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 14054,
                  "name": "onlyBridge",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14663,
                  "src": "4354:10:74"
                },
                "nodeType": "ModifierInvocation",
                "src": "4354:10:74"
              }
            ],
            "name": "executeProposal",
            "nameLocation": "4279:15:74",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14053,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4345:8:74"
            },
            "parameters": {
              "id": 14052,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14049,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "4303:10:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14171,
                  "src": "4295:18:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14048,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4295:7:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14051,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "4330:4:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14171,
                  "src": "4315:19:74",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14050,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4315:5:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4294:41:74"
            },
            "returnParameters": {
              "id": 14058,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14057,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14171,
                  "src": "4374:12:74",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14056,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4374:5:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4373:14:74"
            },
            "scope": 14263,
            "src": "4270:1413:74",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              14707
            ],
            "body": {
              "id": 14217,
              "nodeType": "Block",
              "src": "6240:265:74",
              "statements": [
                {
                  "assignments": [
                    14181
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14181,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nameLocation": "6258:12:74",
                      "nodeType": "VariableDeclaration",
                      "scope": 14217,
                      "src": "6250:20:74",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14180,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6250:7:74",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14182,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6250:20:74"
                },
                {
                  "assignments": [
                    14184
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14184,
                      "mutability": "mutable",
                      "name": "recipient",
                      "nameLocation": "6288:9:74",
                      "nodeType": "VariableDeclaration",
                      "scope": 14217,
                      "src": "6280:17:74",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14183,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6280:7:74",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14185,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6280:17:74"
                },
                {
                  "assignments": [
                    14187
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14187,
                      "mutability": "mutable",
                      "name": "amount",
                      "nameLocation": "6312:6:74",
                      "nodeType": "VariableDeclaration",
                      "scope": 14217,
                      "src": "6307:11:74",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14186,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6307:4:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14188,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6307:11:74"
                },
                {
                  "expression": {
                    "id": 14204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 14189,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14181,
                          "src": "6330:12:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 14190,
                          "name": "recipient",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14184,
                          "src": "6344:9:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 14191,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14187,
                          "src": "6355:6:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 14192,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "6329:33:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint256_$",
                        "typeString": "tuple(address,address,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 14195,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14174,
                          "src": "6376:4:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 14197,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6383:7:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 14196,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "6383:7:74",
                                "typeDescriptions": {}
                              }
                            },
                            {
                              "id": 14199,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6392:7:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 14198,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "6392:7:74",
                                "typeDescriptions": {}
                              }
                            },
                            {
                              "id": 14201,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6401:4:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 14200,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "6401:4:74",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 14202,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "6382:24:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(address),type(address),type(uint256))"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(address),type(address),type(uint256))"
                          }
                        ],
                        "expression": {
                          "id": 14193,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967295,
                          "src": "6365:3:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 14194,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "6365:10:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 14203,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6365:42:74",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_payable_$_t_address_payable_$_t_uint256_$",
                        "typeString": "tuple(address payable,address payable,uint256)"
                      }
                    },
                    "src": "6329:78:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14205,
                  "nodeType": "ExpressionStatement",
                  "src": "6329:78:74"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 14206,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14184,
                        "src": "6418:9:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 14208,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mustNotBeZero",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19136,
                      "src": "6418:23:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address) pure returns (address)"
                      }
                    },
                    "id": 14209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6418:25:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 14210,
                  "nodeType": "ExpressionStatement",
                  "src": "6418:25:74"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14212,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14181,
                        "src": "6466:12:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14213,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14184,
                        "src": "6480:9:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14214,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14187,
                        "src": "6491:6:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14211,
                      "name": "releaseERC20",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9065,
                      "src": "6453:12:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14215,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6453:45:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14216,
                  "nodeType": "ExpressionStatement",
                  "src": "6453:45:74"
                }
              ]
            },
            "documentation": {
              "id": 14172,
              "nodeType": "StructuredDocumentation",
              "src": "5689:480:74",
              "text": "@notice Used to manually release ERC20 tokens from ERC20Safe.\n@param data Consists of {tokenAddress}, {recipient}, and {amount} all padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\ntokenAddress                           address     bytes  0 - 32\nrecipient                              address     bytes  32 - 64\namount                                 uint        bytes  64 - 96"
            },
            "functionSelector": "0968f264",
            "id": 14218,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14178,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 14177,
                  "name": "onlyBridge",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14663,
                  "src": "6229:10:74"
                },
                "nodeType": "ModifierInvocation",
                "src": "6229:10:74"
              }
            ],
            "name": "withdraw",
            "nameLocation": "6183:8:74",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14176,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6220:8:74"
            },
            "parameters": {
              "id": 14175,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14174,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "6205:4:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14218,
                  "src": "6192:17:74",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14173,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6192:5:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6191:19:74"
            },
            "returnParameters": {
              "id": 14179,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6240:0:74"
            },
            "scope": 14263,
            "src": "6174:331:74",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              18300
            ],
            "body": {
              "id": 14261,
              "nodeType": "Block",
              "src": "7431:270:74",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 14230,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14223,
                        "src": "7441:15:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 14232,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mustNotBeZero",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19136,
                      "src": "7441:29:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address) pure returns (address)"
                      }
                    },
                    "id": 14233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7441:31:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 14234,
                  "nodeType": "ExpressionStatement",
                  "src": "7441:31:74"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14236,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14221,
                        "src": "7495:10:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 14237,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14223,
                        "src": "7507:15:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14235,
                      "name": "_setResource",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14742,
                      "src": "7482:12:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 14238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7482:41:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14239,
                  "nodeType": "ExpressionStatement",
                  "src": "7482:41:74"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14243,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 14240,
                        "name": "args",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14225,
                        "src": "7538:4:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      "id": 14241,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "7538:11:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 14242,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7552:1:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7538:15:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14260,
                  "nodeType": "IfStatement",
                  "src": "7534:161:74",
                  "trueBody": {
                    "id": 14259,
                    "nodeType": "Block",
                    "src": "7555:140:74",
                    "statements": [
                      {
                        "assignments": [
                          14245
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 14245,
                            "mutability": "mutable",
                            "name": "externalTokenDecimals",
                            "nameLocation": "7575:21:74",
                            "nodeType": "VariableDeclaration",
                            "scope": 14259,
                            "src": "7569:27:74",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 14244,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "7569:5:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 14253,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 14250,
                                  "name": "args",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14225,
                                  "src": "7612:4:74",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                    "typeString": "bytes calldata"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                    "typeString": "bytes calldata"
                                  }
                                ],
                                "id": 14249,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7605:6:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes1_$",
                                  "typeString": "type(bytes1)"
                                },
                                "typeName": {
                                  "id": 14248,
                                  "name": "bytes1",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7605:6:74",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 14251,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7605:12:74",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              }
                            ],
                            "id": 14247,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7599:5:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint8_$",
                              "typeString": "type(uint8)"
                            },
                            "typeName": {
                              "id": 14246,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "7599:5:74",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 14252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7599:19:74",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7569:49:74"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14255,
                              "name": "contractAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14223,
                              "src": "7645:15:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14256,
                              "name": "externalTokenDecimals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14245,
                              "src": "7662:21:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 14254,
                            "name": "_setDecimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14794,
                            "src": "7632:12:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint8_$returns$__$",
                              "typeString": "function (address,uint8)"
                            }
                          },
                          "id": 14257,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7632:52:74",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14258,
                        "nodeType": "ExpressionStatement",
                        "src": "7632:52:74"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 14219,
              "nodeType": "StructuredDocumentation",
              "src": "6511:808:74",
              "text": "@notice Sets {_resourceIDToContractAddress} with {contractAddress},\n{_tokenContractAddressToTokenProperties[tokenAddress].resourceID} with {resourceID} and\n{_tokenContractAddressToTokenProperties[tokenAddress].isWhitelisted} to true for {contractAddress} in ERCHandlerHelpers contract.\nSets decimals value for contractAddress if value is provided in args.\n@param resourceID ResourceID to be used when making deposits.\n@param contractAddress Address of contract to be called when a deposit is made and a deposited is executed.\n@param args Byte array which is either empty if the token contract decimals are the same as the bridge defaultDecimals,\nor has a first byte set to the uint8 decimals value of the token contract."
            },
            "functionSelector": "fa8675b0",
            "id": 14262,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14228,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 14227,
                  "name": "onlyBridge",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14663,
                  "src": "7420:10:74"
                },
                "nodeType": "ModifierInvocation",
                "src": "7420:10:74"
              }
            ],
            "name": "setResource",
            "nameLocation": "7333:11:74",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14221,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "7353:10:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14262,
                  "src": "7345:18:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14220,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7345:7:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14223,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nameLocation": "7373:15:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14262,
                  "src": "7365:23:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14222,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7365:7:74",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14225,
                  "mutability": "mutable",
                  "name": "args",
                  "nameLocation": "7405:4:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14262,
                  "src": "7390:19:74",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14224,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7390:5:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7344:66:74"
            },
            "returnParameters": {
              "id": 14229,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7431:0:74"
            },
            "scope": 14263,
            "src": "7324:377:74",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 14264,
        "src": "454:7249:74",
        "usedErrors": [
          13959,
          14647,
          19110,
          19116
        ]
      }
    ],
    "src": "81:7623:74"
  },
  "legacyAST": {
    "absolutePath": "project:/contracts/handlers/ERC20Handler.sol",
    "exportedSymbols": {
      "AccessControl": [
        308
      ],
      "AccessControlEnumerable": [
        433
      ],
      "Context": [
        5305
      ],
      "DepositDataHelper": [
        13577
      ],
      "ERC165": [
        6167
      ],
      "ERC20": [
        2990
      ],
      "ERC20Burnable": [
        3112
      ],
      "ERC20Handler": [
        14263
      ],
      "ERC20Pausable": [
        3149
      ],
      "ERC20PresetMinterPauser": [
        3515
      ],
      "ERC20Safe": [
        9222
      ],
      "ERCHandlerHelpers": [
        14917
      ],
      "EnumerableSet": [
        7373
      ],
      "ExcessivelySafeCall": [
        18825
      ],
      "IAccessControl": [
        506
      ],
      "IAccessControlEnumerable": [
        531
      ],
      "IERC165": [
        6381
      ],
      "IERC20": [
        3068
      ],
      "IERC20Metadata": [
        3174
      ],
      "IERCHandler": [
        18195
      ],
      "IHandler": [
        18301
      ],
      "ISygmaMessageReceiver": [
        18315
      ],
      "Pausable": [
        728
      ],
      "SanityChecks": [
        19158
      ],
      "Strings": [
        5582
      ]
    },
    "id": 14264,
    "license": "LGPL-3.0-only",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 13938,
        "literals": [
          "solidity",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "81:23:74"
      },
      {
        "absolutePath": "project:/contracts/interfaces/IHandler.sol",
        "file": "../interfaces/IHandler.sol",
        "id": 13939,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14264,
        "sourceUnit": 18302,
        "src": "106:36:74",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/handlers/ERCHandlerHelpers.sol",
        "file": "./ERCHandlerHelpers.sol",
        "id": 13940,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14264,
        "sourceUnit": 14918,
        "src": "143:33:74",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/handlers/DepositDataHelper.sol",
        "file": "./DepositDataHelper.sol",
        "id": 13941,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14264,
        "sourceUnit": 13578,
        "src": "177:33:74",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/ERC20Safe.sol",
        "file": "../ERC20Safe.sol",
        "id": 13942,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14264,
        "sourceUnit": 9223,
        "src": "211:26:74",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/ExcessivelySafeCall.sol",
        "file": "../utils/ExcessivelySafeCall.sol",
        "id": 13943,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14264,
        "sourceUnit": 18826,
        "src": "238:42:74",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 13945,
              "name": "IHandler",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 18301,
              "src": "479:8:74"
            },
            "id": 13946,
            "nodeType": "InheritanceSpecifier",
            "src": "479:8:74"
          },
          {
            "baseName": {
              "id": 13947,
              "name": "ERCHandlerHelpers",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 14917,
              "src": "489:17:74"
            },
            "id": 13948,
            "nodeType": "InheritanceSpecifier",
            "src": "489:17:74"
          },
          {
            "baseName": {
              "id": 13949,
              "name": "DepositDataHelper",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 13577,
              "src": "508:17:74"
            },
            "id": 13950,
            "nodeType": "InheritanceSpecifier",
            "src": "508:17:74"
          },
          {
            "baseName": {
              "id": 13951,
              "name": "ERC20Safe",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 9222,
              "src": "527:9:74"
            },
            "id": 13952,
            "nodeType": "InheritanceSpecifier",
            "src": "527:9:74"
          }
        ],
        "canonicalName": "ERC20Handler",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 13944,
          "nodeType": "StructuredDocumentation",
          "src": "282:171:74",
          "text": "@title Handles ERC20 deposits and deposit executions.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with the Bridge contract."
        },
        "fullyImplemented": true,
        "id": 14263,
        "linearizedBaseContracts": [
          14263,
          9222,
          13577,
          14917,
          18195,
          18301
        ],
        "name": "ERC20Handler",
        "nameLocation": "463:12:74",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 13954,
            "libraryName": {
              "id": 13953,
              "name": "SanityChecks",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 19158,
              "src": "549:12:74"
            },
            "nodeType": "UsingForDirective",
            "src": "543:25:74"
          },
          {
            "id": 13957,
            "libraryName": {
              "id": 13955,
              "name": "ExcessivelySafeCall",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 18825,
              "src": "579:19:74"
            },
            "nodeType": "UsingForDirective",
            "src": "573:38:74",
            "typeName": {
              "id": 13956,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "603:7:74",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 13959,
            "name": "OptionalMessageCallFailed",
            "nameLocation": "623:25:74",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 13958,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "648:2:74"
            },
            "src": "617:34:74"
          },
          {
            "body": {
              "id": 13971,
              "nodeType": "Block",
              "src": "998:2:74",
              "statements": []
            },
            "documentation": {
              "id": 13960,
              "nodeType": "StructuredDocumentation",
              "src": "657:190:74",
              "text": "@param bridgeAddress Contract address of previously deployed Bridge.\n@param defaultMessageReceiver Contract address of previously deployed DefaultMessageReceiver."
            },
            "id": 13972,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 13967,
                    "name": "bridgeAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13962,
                    "src": "959:13:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "id": 13968,
                    "name": "defaultMessageReceiver",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13964,
                    "src": "974:22:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13969,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 13966,
                  "name": "DepositDataHelper",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 13577,
                  "src": "941:17:74"
                },
                "nodeType": "ModifierInvocation",
                "src": "941:56:74"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13965,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13962,
                  "mutability": "mutable",
                  "name": "bridgeAddress",
                  "nameLocation": "881:13:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 13972,
                  "src": "873:21:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13961,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "873:7:74",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13964,
                  "mutability": "mutable",
                  "name": "defaultMessageReceiver",
                  "nameLocation": "912:22:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 13972,
                  "src": "904:30:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13963,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "904:7:74",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "863:77:74"
            },
            "returnParameters": {
              "id": 13970,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "998:0:74"
            },
            "scope": 14263,
            "src": "852:148:74",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              18280
            ],
            "body": {
              "id": 14045,
              "nodeType": "Block",
              "src": "2612:589:74",
              "statements": [
                {
                  "assignments": [
                    13988
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13988,
                      "mutability": "mutable",
                      "name": "amount",
                      "nameLocation": "2630:6:74",
                      "nodeType": "VariableDeclaration",
                      "scope": 14045,
                      "src": "2622:14:74",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13987,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2622:7:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 13989,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2622:14:74"
                },
                {
                  "expression": {
                    "id": 13999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 13990,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13988,
                          "src": "2647:6:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 13991,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "2646:8:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 13994,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13979,
                          "src": "2668:4:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 13996,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2675:7:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 13995,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2675:7:74",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 13997,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2674:9:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        ],
                        "expression": {
                          "id": 13992,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967295,
                          "src": "2657:3:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 13993,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "2657:10:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 13998,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2657:27:74",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2646:38:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14000,
                  "nodeType": "ExpressionStatement",
                  "src": "2646:38:74"
                },
                {
                  "assignments": [
                    14002
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14002,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nameLocation": "2703:12:74",
                      "nodeType": "VariableDeclaration",
                      "scope": 14045,
                      "src": "2695:20:74",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14001,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2695:7:74",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14006,
                  "initialValue": {
                    "baseExpression": {
                      "id": 14003,
                      "name": "_resourceIDToTokenContractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14651,
                      "src": "2718:33:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 14005,
                    "indexExpression": {
                      "id": 14004,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13975,
                      "src": "2752:10:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2718:45:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2695:68:74"
                },
                {
                  "condition": {
                    "id": 14011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "2777:67:74",
                    "subExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 14007,
                          "name": "_tokenContractAddressToTokenProperties",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14656,
                          "src": "2778:38:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ERCTokenContractProperties_$14643_storage_$",
                            "typeString": "mapping(address => struct ERCHandlerHelpers.ERCTokenContractProperties storage ref)"
                          }
                        },
                        "id": 14009,
                        "indexExpression": {
                          "id": 14008,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14002,
                          "src": "2817:12:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2778:52:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ERCTokenContractProperties_$14643_storage",
                          "typeString": "struct ERCHandlerHelpers.ERCTokenContractProperties storage ref"
                        }
                      },
                      "id": 14010,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isWhitelisted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14637,
                      "src": "2778:66:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14016,
                  "nodeType": "IfStatement",
                  "src": "2773:123:74",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "id": 14013,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14002,
                          "src": "2883:12:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 14012,
                        "name": "ContractAddressNotWhitelisted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14647,
                        "src": "2853:29:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                          "typeString": "function (address) pure"
                        }
                      },
                      "id": 14014,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2853:43:74",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 14015,
                    "nodeType": "RevertStatement",
                    "src": "2846:50:74"
                  }
                },
                {
                  "condition": {
                    "expression": {
                      "baseExpression": {
                        "id": 14017,
                        "name": "_tokenContractAddressToTokenProperties",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14656,
                        "src": "2911:38:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ERCTokenContractProperties_$14643_storage_$",
                          "typeString": "mapping(address => struct ERCHandlerHelpers.ERCTokenContractProperties storage ref)"
                        }
                      },
                      "id": 14019,
                      "indexExpression": {
                        "id": 14018,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14002,
                        "src": "2950:12:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2911:52:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ERCTokenContractProperties_$14643_storage",
                        "typeString": "struct ERCHandlerHelpers.ERCTokenContractProperties storage ref"
                      }
                    },
                    "id": 14020,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isBurnable",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 14639,
                    "src": "2911:63:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 14038,
                    "nodeType": "Block",
                    "src": "3049:82:74",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14029,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14002,
                              "src": "3073:12:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14030,
                              "name": "depositor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13977,
                              "src": "3087:9:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 14033,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967268,
                                  "src": "3106:4:74",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20Handler_$14263",
                                    "typeString": "contract ERC20Handler"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_ERC20Handler_$14263",
                                    "typeString": "contract ERC20Handler"
                                  }
                                ],
                                "id": 14032,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3098:7:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 14031,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3098:7:74",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 14034,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3098:13:74",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14035,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13988,
                              "src": "3113:6:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 14028,
                            "name": "lockERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9041,
                            "src": "3063:9:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 14036,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3063:57:74",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14037,
                        "nodeType": "ExpressionStatement",
                        "src": "3063:57:74"
                      }
                    ]
                  },
                  "id": 14039,
                  "nodeType": "IfStatement",
                  "src": "2907:224:74",
                  "trueBody": {
                    "id": 14027,
                    "nodeType": "Block",
                    "src": "2976:67:74",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14022,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14002,
                              "src": "3000:12:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14023,
                              "name": "depositor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13977,
                              "src": "3014:9:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14024,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13988,
                              "src": "3025:6:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 14021,
                            "name": "burnERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9115,
                            "src": "2990:9:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 14025,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2990:42:74",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14026,
                        "nodeType": "ExpressionStatement",
                        "src": "2990:42:74"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14041,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14002,
                        "src": "3173:12:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14042,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13988,
                        "src": "3187:6:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14040,
                      "name": "convertToInternalBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14916,
                      "src": "3148:24:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (address,uint256) view returns (bytes memory)"
                      }
                    },
                    "id": 14043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3148:46:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 13986,
                  "id": 14044,
                  "nodeType": "Return",
                  "src": "3141:53:74"
                }
              ]
            },
            "documentation": {
              "id": 13973,
              "nodeType": "StructuredDocumentation",
              "src": "1006:1440:74",
              "text": "@notice A deposit is initiated by making a deposit in the Bridge contract.\n@param resourceID ResourceID used to find address of token to be used for deposit.\n@param depositor Address of account making the deposit in the Bridge contract.\n@param data Consists of {amount}, {recipient}, {optionalGas}, {optionalMessage},\npadded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\namount                             uint256 bytes  0 - 32\ndestinationRecipientAddress length uint256 bytes 32 - 64\ndestinationRecipientAddress        bytes   bytes 64 - (64 + len(destinationRecipientAddress))\noptionalGas                        uint256 bytes (64 + len(destinationRecipientAddress)) - (96 + len(destinationRecipientAddress))\noptionalMessage             length uint256 bytes (96 + len(destinationRecipientAddress)) - (128 + len(destinationRecipientAddress))\noptionalMessage                    bytes   bytes (160 + len(destinationRecipientAddress)) - END\n@dev Depending if the corresponding {tokenAddress} for the parsed {resourceID} is\nmarked true in {_tokenContractAddressToTokenProperties[tokenAddress].isBurnable}, deposited tokens will be burned, if not, they will be locked.\n@return 32-length byte array with internal bridge amount OR empty byte array if conversion is not needed."
            },
            "functionSelector": "b07e54bb",
            "id": 14046,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 13983,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 13982,
                  "name": "onlyBridge",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14663,
                  "src": "2578:10:74"
                },
                "nodeType": "ModifierInvocation",
                "src": "2578:10:74"
              }
            ],
            "name": "deposit",
            "nameLocation": "2460:7:74",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13981,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2569:8:74"
            },
            "parameters": {
              "id": 13980,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13975,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "2485:10:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14046,
                  "src": "2477:18:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13974,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2477:7:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13977,
                  "mutability": "mutable",
                  "name": "depositor",
                  "nameLocation": "2513:9:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14046,
                  "src": "2505:17:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13976,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2505:7:74",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13979,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "2549:4:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14046,
                  "src": "2532:21:74",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13978,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2532:5:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2467:92:74"
            },
            "returnParameters": {
              "id": 13986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13985,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14046,
                  "src": "2598:12:74",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13984,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2598:5:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2597:14:74"
            },
            "scope": 14263,
            "src": "2451:750:74",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              18290
            ],
            "body": {
              "id": 14170,
              "nodeType": "Block",
              "src": "4388:1295:74",
              "statements": [
                {
                  "assignments": [
                    14061
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14061,
                      "mutability": "mutable",
                      "name": "depositData",
                      "nameLocation": "4417:11:74",
                      "nodeType": "VariableDeclaration",
                      "scope": 14170,
                      "src": "4398:30:74",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                        "typeString": "struct DepositDataHelper.DepositData"
                      },
                      "typeName": {
                        "id": 14060,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 14059,
                          "name": "DepositData",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 13365,
                          "src": "4398:11:74"
                        },
                        "referencedDeclaration": 13365,
                        "src": "4398:11:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_DepositData_$13365_storage_ptr",
                          "typeString": "struct DepositDataHelper.DepositData"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14066,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 14063,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14049,
                        "src": "4448:10:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 14064,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14051,
                        "src": "4460:4:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 14062,
                      "name": "parseDepositData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13576,
                      "src": "4431:16:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes_calldata_ptr_$returns$_t_struct$_DepositData_$13365_memory_ptr_$",
                        "typeString": "function (bytes32,bytes calldata) view returns (struct DepositDataHelper.DepositData memory)"
                      }
                    },
                    "id": 14065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4431:34:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                      "typeString": "struct DepositDataHelper.DepositData memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4398:67:74"
                },
                {
                  "condition": {
                    "id": 14072,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "4480:79:74",
                    "subExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 14067,
                          "name": "_tokenContractAddressToTokenProperties",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14656,
                          "src": "4481:38:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ERCTokenContractProperties_$14643_storage_$",
                            "typeString": "mapping(address => struct ERCHandlerHelpers.ERCTokenContractProperties storage ref)"
                          }
                        },
                        "id": 14070,
                        "indexExpression": {
                          "expression": {
                            "id": 14068,
                            "name": "depositData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14061,
                            "src": "4520:11:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                              "typeString": "struct DepositDataHelper.DepositData memory"
                            }
                          },
                          "id": 14069,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "tokenAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 13351,
                          "src": "4520:24:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4481:64:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ERCTokenContractProperties_$14643_storage",
                          "typeString": "struct ERCHandlerHelpers.ERCTokenContractProperties storage ref"
                        }
                      },
                      "id": 14071,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isWhitelisted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14637,
                      "src": "4481:78:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14078,
                  "nodeType": "IfStatement",
                  "src": "4476:147:74",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 14074,
                            "name": "depositData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14061,
                            "src": "4598:11:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                              "typeString": "struct DepositDataHelper.DepositData memory"
                            }
                          },
                          "id": 14075,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "tokenAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 13351,
                          "src": "4598:24:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 14073,
                        "name": "ContractAddressNotWhitelisted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14647,
                        "src": "4568:29:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                          "typeString": "function (address) pure"
                        }
                      },
                      "id": 14076,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4568:55:74",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 14077,
                    "nodeType": "RevertStatement",
                    "src": "4561:62:74"
                  }
                },
                {
                  "condition": {
                    "expression": {
                      "baseExpression": {
                        "id": 14079,
                        "name": "_tokenContractAddressToTokenProperties",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14656,
                        "src": "4638:38:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ERCTokenContractProperties_$14643_storage_$",
                          "typeString": "mapping(address => struct ERCHandlerHelpers.ERCTokenContractProperties storage ref)"
                        }
                      },
                      "id": 14082,
                      "indexExpression": {
                        "expression": {
                          "id": 14080,
                          "name": "depositData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14061,
                          "src": "4677:11:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                            "typeString": "struct DepositDataHelper.DepositData memory"
                          }
                        },
                        "id": 14081,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tokenAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 13351,
                        "src": "4677:24:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4638:64:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ERCTokenContractProperties_$14643_storage",
                        "typeString": "struct ERCHandlerHelpers.ERCTokenContractProperties storage ref"
                      }
                    },
                    "id": 14083,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isBurnable",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 14639,
                    "src": "4638:75:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 14103,
                    "nodeType": "Block",
                    "src": "4839:121:74",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 14095,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "4866:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14096,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tokenAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13351,
                              "src": "4866:24:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 14097,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "4892:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14098,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "recipientAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13355,
                              "src": "4892:28:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 14099,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "4922:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14100,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "externalAmount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13357,
                              "src": "4922:26:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 14094,
                            "name": "releaseERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9065,
                            "src": "4853:12:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 14101,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4853:96:74",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14102,
                        "nodeType": "ExpressionStatement",
                        "src": "4853:96:74"
                      }
                    ]
                  },
                  "id": 14104,
                  "nodeType": "IfStatement",
                  "src": "4634:326:74",
                  "trueBody": {
                    "id": 14093,
                    "nodeType": "Block",
                    "src": "4715:118:74",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 14085,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "4739:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14086,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tokenAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13351,
                              "src": "4739:24:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 14087,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "4765:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14088,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "recipientAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13355,
                              "src": "4765:28:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 14089,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "4795:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14090,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "externalAmount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13357,
                              "src": "4795:26:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 14084,
                            "name": "mintERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9090,
                            "src": "4729:9:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 14091,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4729:93:74",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14092,
                        "nodeType": "ExpressionStatement",
                        "src": "4729:93:74"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_enum$_OptionalMessageCheck_$13349",
                      "typeString": "enum DepositDataHelper.OptionalMessageCheck"
                    },
                    "id": 14109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 14105,
                        "name": "depositData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14061,
                        "src": "4974:11:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                          "typeString": "struct DepositDataHelper.DepositData memory"
                        }
                      },
                      "id": 14106,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "optionalMessageCheck",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13362,
                      "src": "4974:32:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_OptionalMessageCheck_$13349",
                        "typeString": "enum DepositDataHelper.OptionalMessageCheck"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "id": 14107,
                        "name": "OptionalMessageCheck",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13349,
                        "src": "5010:20:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_OptionalMessageCheck_$13349_$",
                          "typeString": "type(enum DepositDataHelper.OptionalMessageCheck)"
                        }
                      },
                      "id": 14108,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Invalid",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13348,
                      "src": "5010:28:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_OptionalMessageCheck_$13349",
                        "typeString": "enum DepositDataHelper.OptionalMessageCheck"
                      }
                    },
                    "src": "4974:64:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14114,
                  "nodeType": "IfStatement",
                  "src": "4970:121:74",
                  "trueBody": {
                    "id": 14113,
                    "nodeType": "Block",
                    "src": "5040:51:74",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 14110,
                            "name": "depositData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14061,
                            "src": "5061:11:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                              "typeString": "struct DepositDataHelper.DepositData memory"
                            }
                          },
                          "id": 14111,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "message",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 13364,
                          "src": "5061:19:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 14058,
                        "id": 14112,
                        "nodeType": "Return",
                        "src": "5054:26:74"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_enum$_OptionalMessageCheck_$13349",
                      "typeString": "enum DepositDataHelper.OptionalMessageCheck"
                    },
                    "id": 14119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 14115,
                        "name": "depositData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14061,
                        "src": "5105:11:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                          "typeString": "struct DepositDataHelper.DepositData memory"
                        }
                      },
                      "id": 14116,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "optionalMessageCheck",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13362,
                      "src": "5105:32:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_OptionalMessageCheck_$13349",
                        "typeString": "enum DepositDataHelper.OptionalMessageCheck"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "id": 14117,
                        "name": "OptionalMessageCheck",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13349,
                        "src": "5141:20:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_OptionalMessageCheck_$13349_$",
                          "typeString": "type(enum DepositDataHelper.OptionalMessageCheck)"
                        }
                      },
                      "id": 14118,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Valid",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13347,
                      "src": "5141:26:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_OptionalMessageCheck_$13349",
                        "typeString": "enum DepositDataHelper.OptionalMessageCheck"
                      }
                    },
                    "src": "5105:62:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14159,
                  "nodeType": "IfStatement",
                  "src": "5101:472:74",
                  "trueBody": {
                    "id": 14158,
                    "nodeType": "Block",
                    "src": "5169:404:74",
                    "statements": [
                      {
                        "assignments": [
                          14121,
                          14123
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 14121,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "5189:7:74",
                            "nodeType": "VariableDeclaration",
                            "scope": 14158,
                            "src": "5184:12:74",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 14120,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "5184:4:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 14123,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "5211:6:74",
                            "nodeType": "VariableDeclaration",
                            "scope": 14158,
                            "src": "5198:19:74",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 14122,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "5198:5:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 14134,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 14127,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "5286:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14128,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "gas",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13359,
                              "src": "5286:15:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 14129,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5303:1:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "id": 14130,
                              "name": "maxReturnBytes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13339,
                              "src": "5306:14:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            {
                              "expression": {
                                "id": 14131,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "5322:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14132,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "message",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13364,
                              "src": "5322:19:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "expression": {
                                "id": 14124,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "5237:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14125,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "recipientAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13355,
                              "src": "5237:28:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 14126,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "excessivelySafeCall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18771,
                            "src": "5237:48:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint16_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$bound_to$_t_address_$",
                              "typeString": "function (address,uint256,uint256,uint16,bytes memory) returns (bool,bytes memory)"
                            }
                          },
                          "id": 14133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5237:105:74",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5183:159:74"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 14142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 14136,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "5360:8:74",
                            "subExpression": {
                              "id": 14135,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14121,
                              "src": "5361:7:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "id": 14141,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "5372:39:74",
                            "subExpression": {
                              "arguments": [
                                {
                                  "id": 14139,
                                  "name": "result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14123,
                                  "src": "5404:6:74",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "expression": {
                                  "id": 14137,
                                  "name": "ExcessivelySafeCall",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18825,
                                  "src": "5373:19:74",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_ExcessivelySafeCall_$18825_$",
                                    "typeString": "type(library ExcessivelySafeCall)"
                                  }
                                },
                                "id": 14138,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "revertWith",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18824,
                                "src": "5373:30:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$",
                                  "typeString": "function (bytes memory) pure returns (bool)"
                                }
                              },
                              "id": 14140,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5373:38:74",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "5360:51:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 14146,
                        "nodeType": "IfStatement",
                        "src": "5356:91:74",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 14143,
                              "name": "OptionalMessageCallFailed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13959,
                              "src": "5420:25:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 14144,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5420:27:74",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 14145,
                          "nodeType": "RevertStatement",
                          "src": "5413:34:74"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 14149,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "5479:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14150,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tokenAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13351,
                              "src": "5479:24:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 14151,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "5505:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14152,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "recipientAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13355,
                              "src": "5505:28:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 14153,
                                "name": "depositData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14061,
                                "src": "5535:11:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                                  "typeString": "struct DepositDataHelper.DepositData memory"
                                }
                              },
                              "id": 14154,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13353,
                              "src": "5535:18:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 14155,
                              "name": "result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14123,
                              "src": "5555:6:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 14147,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967295,
                              "src": "5468:3:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 14148,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encode",
                            "nodeType": "MemberAccess",
                            "src": "5468:10:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 14156,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5468:94:74",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 14058,
                        "id": 14157,
                        "nodeType": "Return",
                        "src": "5461:101:74"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 14162,
                          "name": "depositData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14061,
                          "src": "5601:11:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                            "typeString": "struct DepositDataHelper.DepositData memory"
                          }
                        },
                        "id": 14163,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tokenAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 13351,
                        "src": "5601:24:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 14164,
                          "name": "depositData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14061,
                          "src": "5627:11:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                            "typeString": "struct DepositDataHelper.DepositData memory"
                          }
                        },
                        "id": 14165,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "recipientAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 13355,
                        "src": "5627:28:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 14166,
                          "name": "depositData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14061,
                          "src": "5657:11:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DepositData_$13365_memory_ptr",
                            "typeString": "struct DepositDataHelper.DepositData memory"
                          }
                        },
                        "id": 14167,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 13353,
                        "src": "5657:18:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 14160,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "5590:3:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 14161,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encode",
                      "nodeType": "MemberAccess",
                      "src": "5590:10:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 14168,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5590:86:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 14058,
                  "id": 14169,
                  "nodeType": "Return",
                  "src": "5583:93:74"
                }
              ]
            },
            "documentation": {
              "id": 14047,
              "nodeType": "StructuredDocumentation",
              "src": "3207:1058:74",
              "text": "@notice Proposal execution should be initiated when a proposal is finalized in the Bridge contract.\nby a relayer on the deposit's destination chain.\n@param resourceID ResourceID to be used when making deposits.\n@param data Consists of {amount}, {recipient}, {optionalGas}, {optionalMessage},\npadded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\namount                             uint256 bytes  0 - 32\ndestinationRecipientAddress length uint256 bytes 32 - 64\ndestinationRecipientAddress        bytes   bytes 64 - (64 + len(destinationRecipientAddress))\noptionalGas                        uint256 bytes (64 + len(destinationRecipientAddress)) - (96 + len(destinationRecipientAddress))\noptionalMessage             length uint256 bytes (96 + len(destinationRecipientAddress)) - (128 + len(destinationRecipientAddress))\noptionalMessage                    bytes   bytes (160 + len(destinationRecipientAddress)) - END"
            },
            "functionSelector": "e248cff2",
            "id": 14171,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14055,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 14054,
                  "name": "onlyBridge",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14663,
                  "src": "4354:10:74"
                },
                "nodeType": "ModifierInvocation",
                "src": "4354:10:74"
              }
            ],
            "name": "executeProposal",
            "nameLocation": "4279:15:74",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14053,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4345:8:74"
            },
            "parameters": {
              "id": 14052,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14049,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "4303:10:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14171,
                  "src": "4295:18:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14048,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4295:7:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14051,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "4330:4:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14171,
                  "src": "4315:19:74",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14050,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4315:5:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4294:41:74"
            },
            "returnParameters": {
              "id": 14058,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14057,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14171,
                  "src": "4374:12:74",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14056,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4374:5:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4373:14:74"
            },
            "scope": 14263,
            "src": "4270:1413:74",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              14707
            ],
            "body": {
              "id": 14217,
              "nodeType": "Block",
              "src": "6240:265:74",
              "statements": [
                {
                  "assignments": [
                    14181
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14181,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nameLocation": "6258:12:74",
                      "nodeType": "VariableDeclaration",
                      "scope": 14217,
                      "src": "6250:20:74",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14180,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6250:7:74",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14182,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6250:20:74"
                },
                {
                  "assignments": [
                    14184
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14184,
                      "mutability": "mutable",
                      "name": "recipient",
                      "nameLocation": "6288:9:74",
                      "nodeType": "VariableDeclaration",
                      "scope": 14217,
                      "src": "6280:17:74",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14183,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6280:7:74",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14185,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6280:17:74"
                },
                {
                  "assignments": [
                    14187
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14187,
                      "mutability": "mutable",
                      "name": "amount",
                      "nameLocation": "6312:6:74",
                      "nodeType": "VariableDeclaration",
                      "scope": 14217,
                      "src": "6307:11:74",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14186,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6307:4:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14188,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6307:11:74"
                },
                {
                  "expression": {
                    "id": 14204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 14189,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14181,
                          "src": "6330:12:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 14190,
                          "name": "recipient",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14184,
                          "src": "6344:9:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 14191,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14187,
                          "src": "6355:6:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 14192,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "6329:33:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint256_$",
                        "typeString": "tuple(address,address,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 14195,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14174,
                          "src": "6376:4:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 14197,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6383:7:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 14196,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "6383:7:74",
                                "typeDescriptions": {}
                              }
                            },
                            {
                              "id": 14199,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6392:7:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 14198,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "6392:7:74",
                                "typeDescriptions": {}
                              }
                            },
                            {
                              "id": 14201,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6401:4:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 14200,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "6401:4:74",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 14202,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "6382:24:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(address),type(address),type(uint256))"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(address),type(address),type(uint256))"
                          }
                        ],
                        "expression": {
                          "id": 14193,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967295,
                          "src": "6365:3:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 14194,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "6365:10:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 14203,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6365:42:74",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_payable_$_t_address_payable_$_t_uint256_$",
                        "typeString": "tuple(address payable,address payable,uint256)"
                      }
                    },
                    "src": "6329:78:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14205,
                  "nodeType": "ExpressionStatement",
                  "src": "6329:78:74"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 14206,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14184,
                        "src": "6418:9:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 14208,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mustNotBeZero",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19136,
                      "src": "6418:23:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address) pure returns (address)"
                      }
                    },
                    "id": 14209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6418:25:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 14210,
                  "nodeType": "ExpressionStatement",
                  "src": "6418:25:74"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14212,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14181,
                        "src": "6466:12:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14213,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14184,
                        "src": "6480:9:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14214,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14187,
                        "src": "6491:6:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14211,
                      "name": "releaseERC20",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9065,
                      "src": "6453:12:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14215,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6453:45:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14216,
                  "nodeType": "ExpressionStatement",
                  "src": "6453:45:74"
                }
              ]
            },
            "documentation": {
              "id": 14172,
              "nodeType": "StructuredDocumentation",
              "src": "5689:480:74",
              "text": "@notice Used to manually release ERC20 tokens from ERC20Safe.\n@param data Consists of {tokenAddress}, {recipient}, and {amount} all padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\ntokenAddress                           address     bytes  0 - 32\nrecipient                              address     bytes  32 - 64\namount                                 uint        bytes  64 - 96"
            },
            "functionSelector": "0968f264",
            "id": 14218,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14178,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 14177,
                  "name": "onlyBridge",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14663,
                  "src": "6229:10:74"
                },
                "nodeType": "ModifierInvocation",
                "src": "6229:10:74"
              }
            ],
            "name": "withdraw",
            "nameLocation": "6183:8:74",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14176,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6220:8:74"
            },
            "parameters": {
              "id": 14175,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14174,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "6205:4:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14218,
                  "src": "6192:17:74",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14173,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6192:5:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6191:19:74"
            },
            "returnParameters": {
              "id": 14179,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6240:0:74"
            },
            "scope": 14263,
            "src": "6174:331:74",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              18300
            ],
            "body": {
              "id": 14261,
              "nodeType": "Block",
              "src": "7431:270:74",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 14230,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14223,
                        "src": "7441:15:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 14232,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mustNotBeZero",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19136,
                      "src": "7441:29:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address) pure returns (address)"
                      }
                    },
                    "id": 14233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7441:31:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 14234,
                  "nodeType": "ExpressionStatement",
                  "src": "7441:31:74"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14236,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14221,
                        "src": "7495:10:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 14237,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14223,
                        "src": "7507:15:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14235,
                      "name": "_setResource",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14742,
                      "src": "7482:12:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 14238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7482:41:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14239,
                  "nodeType": "ExpressionStatement",
                  "src": "7482:41:74"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14243,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 14240,
                        "name": "args",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14225,
                        "src": "7538:4:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      "id": 14241,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "7538:11:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 14242,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7552:1:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7538:15:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14260,
                  "nodeType": "IfStatement",
                  "src": "7534:161:74",
                  "trueBody": {
                    "id": 14259,
                    "nodeType": "Block",
                    "src": "7555:140:74",
                    "statements": [
                      {
                        "assignments": [
                          14245
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 14245,
                            "mutability": "mutable",
                            "name": "externalTokenDecimals",
                            "nameLocation": "7575:21:74",
                            "nodeType": "VariableDeclaration",
                            "scope": 14259,
                            "src": "7569:27:74",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 14244,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "7569:5:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 14253,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 14250,
                                  "name": "args",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14225,
                                  "src": "7612:4:74",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                    "typeString": "bytes calldata"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                    "typeString": "bytes calldata"
                                  }
                                ],
                                "id": 14249,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7605:6:74",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes1_$",
                                  "typeString": "type(bytes1)"
                                },
                                "typeName": {
                                  "id": 14248,
                                  "name": "bytes1",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7605:6:74",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 14251,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7605:12:74",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              }
                            ],
                            "id": 14247,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7599:5:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint8_$",
                              "typeString": "type(uint8)"
                            },
                            "typeName": {
                              "id": 14246,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "7599:5:74",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 14252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7599:19:74",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7569:49:74"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14255,
                              "name": "contractAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14223,
                              "src": "7645:15:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14256,
                              "name": "externalTokenDecimals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14245,
                              "src": "7662:21:74",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 14254,
                            "name": "_setDecimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14794,
                            "src": "7632:12:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint8_$returns$__$",
                              "typeString": "function (address,uint8)"
                            }
                          },
                          "id": 14257,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7632:52:74",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14258,
                        "nodeType": "ExpressionStatement",
                        "src": "7632:52:74"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 14219,
              "nodeType": "StructuredDocumentation",
              "src": "6511:808:74",
              "text": "@notice Sets {_resourceIDToContractAddress} with {contractAddress},\n{_tokenContractAddressToTokenProperties[tokenAddress].resourceID} with {resourceID} and\n{_tokenContractAddressToTokenProperties[tokenAddress].isWhitelisted} to true for {contractAddress} in ERCHandlerHelpers contract.\nSets decimals value for contractAddress if value is provided in args.\n@param resourceID ResourceID to be used when making deposits.\n@param contractAddress Address of contract to be called when a deposit is made and a deposited is executed.\n@param args Byte array which is either empty if the token contract decimals are the same as the bridge defaultDecimals,\nor has a first byte set to the uint8 decimals value of the token contract."
            },
            "functionSelector": "fa8675b0",
            "id": 14262,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14228,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 14227,
                  "name": "onlyBridge",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14663,
                  "src": "7420:10:74"
                },
                "nodeType": "ModifierInvocation",
                "src": "7420:10:74"
              }
            ],
            "name": "setResource",
            "nameLocation": "7333:11:74",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14221,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "7353:10:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14262,
                  "src": "7345:18:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14220,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7345:7:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14223,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nameLocation": "7373:15:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14262,
                  "src": "7365:23:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14222,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7365:7:74",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14225,
                  "mutability": "mutable",
                  "name": "args",
                  "nameLocation": "7405:4:74",
                  "nodeType": "VariableDeclaration",
                  "scope": 14262,
                  "src": "7390:19:74",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14224,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7390:5:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7344:66:74"
            },
            "returnParameters": {
              "id": 14229,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7431:0:74"
            },
            "scope": 14263,
            "src": "7324:377:74",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 14264,
        "src": "454:7249:74",
        "usedErrors": [
          13959,
          14647,
          19110,
          19116
        ]
      }
    ],
    "src": "81:7623:74"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.11+commit.d7f03943.Emscripten.clang"
  },
  "networks": {
    "1727170272871": {
      "events": {},
      "links": {},
      "address": "0xC2D334e2f27A9dB2Ed8C4561De86C1A00EBf6760",
      "transactionHash": "0xd50deb93432702bdda168d36c4a438b30a1b1f163ca0e4c8e92d5c166677a4c6"
    },
    "1727170313921": {
      "events": {},
      "links": {},
      "address": "0xC2D334e2f27A9dB2Ed8C4561De86C1A00EBf6760",
      "transactionHash": "0xaae66c4801a53e1e1e1b269f3f28ee0ea49107078a96562fb87798d4a9958b81"
    }
  },
  "schemaVersion": "3.4.6",
  "updatedAt": "2024-09-24T09:32:13.432Z",
  "networkType": "ethereum",
  "devdoc": {
    "author": "ChainSafe Systems.",
    "kind": "dev",
    "methods": {
      "constructor": {
        "params": {
          "bridgeAddress": "Contract address of previously deployed Bridge.",
          "defaultMessageReceiver": "Contract address of previously deployed DefaultMessageReceiver."
        }
      },
      "deposit(bytes32,address,bytes)": {
        "details": "Depending if the corresponding {tokenAddress} for the parsed {resourceID} is marked true in {_tokenContractAddressToTokenProperties[tokenAddress].isBurnable}, deposited tokens will be burned, if not, they will be locked.",
        "params": {
          "data": "Consists of {amount}, {recipient}, {optionalGas}, {optionalMessage}, padded to 32 bytes.",
          "depositor": "Address of account making the deposit in the Bridge contract.",
          "resourceID": "ResourceID used to find address of token to be used for deposit."
        },
        "returns": {
          "_0": "32-length byte array with internal bridge amount OR empty byte array if conversion is not needed."
        }
      },
      "executeProposal(bytes32,bytes)": {
        "params": {
          "data": "Consists of {amount}, {recipient}, {optionalGas}, {optionalMessage}, padded to 32 bytes.",
          "resourceID": "ResourceID to be used when making deposits."
        }
      },
      "setBurnable(address)": {
        "params": {
          "contractAddress": "Address of contract to be used when making or executing deposits."
        }
      },
      "setResource(bytes32,address,bytes)": {
        "params": {
          "args": "Byte array which is either empty if the token contract decimals are the same as the bridge defaultDecimals, or has a first byte set to the uint8 decimals value of the token contract.",
          "contractAddress": "Address of contract to be called when a deposit is made and a deposited is executed.",
          "resourceID": "ResourceID to be used when making deposits."
        }
      },
      "withdraw(bytes)": {
        "params": {
          "data": "Consists of {tokenAddress}, {recipient}, and {amount} all padded to 32 bytes."
        }
      }
    },
    "title": "Handles ERC20 deposits and deposit executions.",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "_resourceIDToTokenContractAddress(bytes32)": {
        "notice": "Exposing getter for {_resourceIDToTokenContractAddress}."
      },
      "deposit(bytes32,address,bytes)": {
        "notice": "A deposit is initiated by making a deposit in the Bridge contract.Data passed into the function should be constructed as follows: amount                             uint256 bytes  0 - 32 destinationRecipientAddress length uint256 bytes 32 - 64 destinationRecipientAddress        bytes   bytes 64 - (64 + len(destinationRecipientAddress)) optionalGas                        uint256 bytes (64 + len(destinationRecipientAddress)) - (96 + len(destinationRecipientAddress)) optionalMessage             length uint256 bytes (96 + len(destinationRecipientAddress)) - (128 + len(destinationRecipientAddress)) optionalMessage                    bytes   bytes (160 + len(destinationRecipientAddress)) - END"
      },
      "executeProposal(bytes32,bytes)": {
        "notice": "Proposal execution should be initiated when a proposal is finalized in the Bridge contract. by a relayer on the deposit's destination chain.Data passed into the function should be constructed as follows: amount                             uint256 bytes  0 - 32 destinationRecipientAddress length uint256 bytes 32 - 64 destinationRecipientAddress        bytes   bytes 64 - (64 + len(destinationRecipientAddress)) optionalGas                        uint256 bytes (64 + len(destinationRecipientAddress)) - (96 + len(destinationRecipientAddress)) optionalMessage             length uint256 bytes (96 + len(destinationRecipientAddress)) - (128 + len(destinationRecipientAddress)) optionalMessage                    bytes   bytes (160 + len(destinationRecipientAddress)) - END"
      },
      "setBurnable(address)": {
        "notice": "First verifies {contractAddress} is whitelisted, then sets {_tokenContractAddressToTokenProperties[contractAddress].isBurnable} to true."
      },
      "setResource(bytes32,address,bytes)": {
        "notice": "Sets {_resourceIDToContractAddress} with {contractAddress}, {_tokenContractAddressToTokenProperties[tokenAddress].resourceID} with {resourceID} and {_tokenContractAddressToTokenProperties[tokenAddress].isWhitelisted} to true for {contractAddress} in ERCHandlerHelpers contract. Sets decimals value for contractAddress if value is provided in args."
      },
      "withdraw(bytes)": {
        "notice": "Used to manually release ERC20 tokens from ERC20Safe.Data passed into the function should be constructed as follows: tokenAddress                           address     bytes  0 - 32 recipient                              address     bytes  32 - 64 amount                                 uint        bytes  64 - 96"
      }
    },
    "notice": "This contract is intended to be used with the Bridge contract.",
    "version": 1
  }
}