{
  "contractName": "ForwarderRegistry",
  "sourceName": "solc_0.8/ForwarderRegistry.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "signer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "forwarder",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        }
      ],
      "name": "ForwarderApproved",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        },
        {
          "internalType": "bool",
          "name": "isEIP1271Signature",
          "type": "bool"
        },
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "approveAndForward",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "forwarderToChangeApproval",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        },
        {
          "internalType": "bool",
          "name": "isEIP1271Signature",
          "type": "bool"
        }
      ],
      "name": "approveForwarder",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        },
        {
          "internalType": "bool",
          "name": "isEIP1271Signature",
          "type": "bool"
        },
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "checkApprovalAndForward",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "forward",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "signer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "forwarder",
          "type": "address"
        }
      ],
      "name": "getNonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "signer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "forwarder",
          "type": "address"
        }
      ],
      "name": "isApprovedForwarder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "isTrustedForwarder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x60c060405234801561001057600080fd5b50466080818152604080517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666020808301919091527f06a520fda4ca688235391b02e357c6a65eb2a3bb40a69c0199f3f7f9cccee041828401526060820185905230828501528251808303909401845260a0909101909152815191012060a0525060805160a0516114996100b6600039600061062e0152600061058701526114996000f3fe60806040526004361061007b5760003560e01c80638929a8ca1161004e5780638929a8ca146101015780639438f7f314610121578063d828435d14610134578063d9e07567146101a657600080fd5b80633644e515146100805780633b7136e7146100a8578063572b6c05146100bd5780636fadcf72146100ee575b600080fd5b34801561008c57600080fd5b506100956101c6565b6040519081526020015b60405180910390f35b6100bb6100b63660046110f5565b6101d5565b005b3480156100c957600080fd5b506100de6100d8366004611189565b50600190565b604051901515815260200161009f565b6100bb6100fc3660046111a4565b6102ed565b34801561010d57600080fd5b506100de61011c3660046111f7565b610428565b6100bb61012f3660046110f5565b610486565b34801561014057600080fd5b5061009561014f3660046111f7565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b3480156101b257600080fd5b506100bb6101c136600461122a565b610518565b60006101d0610582565b905090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c6000818152602081815260408083203380855290835292819020548151601f8b0184900484028101840190925289825261027e92859285926001927effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911691908e908e90819084018382808284376000920191909152508e9250610654915050565b6102e2848484604051602001610296939291906112a0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff87169034610848565b505050505050505050565b367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec013560601c6000818152602081815260408083203384529091529020547f0100000000000000000000000000000000000000000000000000000000000000900460ff166103bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4e4f545f415554484f52495a45445f464f52574152444552000000000000000060448201526064015b60405180910390fd5b6104218383836040516020016103d5939291906112a0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff86169034610848565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff828116600090815260208181526040808320938516835292905220547f0100000000000000000000000000000000000000000000000000000000000000900460ff165b92915050565b6000367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec013560601c90506104f6813360018a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250610878915050565b61050e8383836040516020016103d5939291906112a0565b5050505050505050565b610421367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec013560601c868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250610878915050565b6000467f0000000000000000000000000000000000000000000000000000000000000000811461062c57604080517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666020808301919091527f06a520fda4ca688235391b02e357c6a65eb2a3bb40a69c0199f3f7f9cccee0418284015260608201849052306080808401919091528351808403909101815260a0909201909252805191012061064e565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b6000610662878787876109db565b9050811561079457805160208201206040517f1626ba7e000000000000000000000000000000000000000000000000000000008082529173ffffffffffffffffffffffffffffffffffffffff8a1691631626ba7e916106c5918890600401611347565b602060405180830381865afa1580156106e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107069190611360565b7fffffffff00000000000000000000000000000000000000000000000000000000161461078f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5349474e41545552455f313237315f494e56414c49440000000000000000000060448201526064016103b4565b61083f565b805160208201206000906107a89085610ab9565b90508073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461050e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5349474e41545552455f57524f4e475f5349474e45520000000000000000000060448201526064016103b4565b50505050505050565b606061086e84848460405180606001604052806029815260200161143b60299139610add565b90505b9392505050565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526020818152604080832093881683529290522080547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166108d9878787848888610654565b81547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000008615150217825561092f8160016113a2565b82547fff00000000000000000000000000000000000000000000000000000000000000167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff919091161782556040805186151581526020810183905273ffffffffffffffffffffffffffffffffffffffff88811692908a16917f26eeb9a45fc0ed1a714977219563a1ae73a8da96bc19e08479dab98729dec65a910160405180910390a350505050505050565b60606109e5610582565b604080517f247e6797654d5fd2cb7b467724cabc2b14be5382309752af66c95151824a9583602082015273ffffffffffffffffffffffffffffffffffffffff808916928201929092529086166060820152841515608082015260a0810184905260c00160405160208183030381529060405280519060200120604051602001610aa09291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6040516020818303038152906040529050949350505050565b6000806000610ac88585610c73565b91509150610ad581610cb8565b509392505050565b606082471015610b6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103b4565b73ffffffffffffffffffffffffffffffffffffffff85163b610bed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103b4565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c1691906113dc565b60006040518083038185875af1925050503d8060008114610c53576040519150601f19603f3d011682016040523d82523d6000602084013e610c58565b606091505b5091509150610c68828286610f0f565b979650505050505050565b6000808251604103610ca95760208301516040840151606085015160001a610c9d87828585610f62565b94509450505050610cb1565b506000905060025b9250929050565b6000816004811115610ccc57610ccc6113f8565b03610cd45750565b6001816004811115610ce857610ce86113f8565b03610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103b4565b6002816004811115610d6357610d636113f8565b03610dca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103b4565b6003816004811115610dde57610dde6113f8565b03610e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016103b4565b6004816004811115610e7f57610e7f6113f8565b03610f0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016103b4565b50565b60608315610f1e575081610871565b825115610f2e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b49190611427565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f995750600090506003611071565b8460ff16601b14158015610fb157508460ff16601c14155b15610fc25750600090506004611071565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611016573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661106a57600060019250925050611071565b9150600090505b94509492505050565b60008083601f84011261108c57600080fd5b50813567ffffffffffffffff8111156110a457600080fd5b602083019150836020828501011115610cb157600080fd5b803580151581146110cc57600080fd5b919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146110cc57600080fd5b6000806000806000806080878903121561110e57600080fd5b863567ffffffffffffffff8082111561112657600080fd5b6111328a838b0161107a565b909850965086915061114660208a016110bc565b955061115460408a016110d1565b9450606089013591508082111561116a57600080fd5b5061117789828a0161107a565b979a9699509497509295939492505050565b60006020828403121561119b57600080fd5b610871826110d1565b6000806000604084860312156111b957600080fd5b6111c2846110d1565b9250602084013567ffffffffffffffff8111156111de57600080fd5b6111ea8682870161107a565b9497909650939450505050565b6000806040838503121561120a57600080fd5b611213836110d1565b9150611221602084016110d1565b90509250929050565b60008060008060006080868803121561124257600080fd5b61124b866110d1565b9450611259602087016110bc565b9350604086013567ffffffffffffffff81111561127557600080fd5b6112818882890161107a565b90945092506112949050606087016110bc565b90509295509295909350565b8284823760609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169101908152601401919050565b60005b838110156112f45781810151838201526020016112dc565b50506000910152565b600081518084526113158160208601602086016112d9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b82815260406020820152600061086e60408301846112fd565b60006020828403121561137257600080fd5b81517fffffffff000000000000000000000000000000000000000000000000000000008116811461087157600080fd5b80820180821115610480577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082516113ee8184602087016112d9565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208152600061087160208301846112fd56fe416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564a2646970667358221220a34d1c47b4de79fcc7581589f24d70beb932e094b702f5c27ee04fca4a9b2a2964736f6c63430008100033",
  "deployedBytecode": "0x60806040526004361061007b5760003560e01c80638929a8ca1161004e5780638929a8ca146101015780639438f7f314610121578063d828435d14610134578063d9e07567146101a657600080fd5b80633644e515146100805780633b7136e7146100a8578063572b6c05146100bd5780636fadcf72146100ee575b600080fd5b34801561008c57600080fd5b506100956101c6565b6040519081526020015b60405180910390f35b6100bb6100b63660046110f5565b6101d5565b005b3480156100c957600080fd5b506100de6100d8366004611189565b50600190565b604051901515815260200161009f565b6100bb6100fc3660046111a4565b6102ed565b34801561010d57600080fd5b506100de61011c3660046111f7565b610428565b6100bb61012f3660046110f5565b610486565b34801561014057600080fd5b5061009561014f3660046111f7565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b3480156101b257600080fd5b506100bb6101c136600461122a565b610518565b60006101d0610582565b905090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c6000818152602081815260408083203380855290835292819020548151601f8b0184900484028101840190925289825261027e92859285926001927effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911691908e908e90819084018382808284376000920191909152508e9250610654915050565b6102e2848484604051602001610296939291906112a0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff87169034610848565b505050505050505050565b367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec013560601c6000818152602081815260408083203384529091529020547f0100000000000000000000000000000000000000000000000000000000000000900460ff166103bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4e4f545f415554484f52495a45445f464f52574152444552000000000000000060448201526064015b60405180910390fd5b6104218383836040516020016103d5939291906112a0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff86169034610848565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff828116600090815260208181526040808320938516835292905220547f0100000000000000000000000000000000000000000000000000000000000000900460ff165b92915050565b6000367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec013560601c90506104f6813360018a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250610878915050565b61050e8383836040516020016103d5939291906112a0565b5050505050505050565b610421367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec013560601c868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250610878915050565b6000467f0000000000000000000000000000000000000000000000000000000000000000811461062c57604080517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666020808301919091527f06a520fda4ca688235391b02e357c6a65eb2a3bb40a69c0199f3f7f9cccee0418284015260608201849052306080808401919091528351808403909101815260a0909201909252805191012061064e565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b6000610662878787876109db565b9050811561079457805160208201206040517f1626ba7e000000000000000000000000000000000000000000000000000000008082529173ffffffffffffffffffffffffffffffffffffffff8a1691631626ba7e916106c5918890600401611347565b602060405180830381865afa1580156106e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107069190611360565b7fffffffff00000000000000000000000000000000000000000000000000000000161461078f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5349474e41545552455f313237315f494e56414c49440000000000000000000060448201526064016103b4565b61083f565b805160208201206000906107a89085610ab9565b90508073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461050e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5349474e41545552455f57524f4e475f5349474e45520000000000000000000060448201526064016103b4565b50505050505050565b606061086e84848460405180606001604052806029815260200161143b60299139610add565b90505b9392505050565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526020818152604080832093881683529290522080547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166108d9878787848888610654565b81547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000008615150217825561092f8160016113a2565b82547fff00000000000000000000000000000000000000000000000000000000000000167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff919091161782556040805186151581526020810183905273ffffffffffffffffffffffffffffffffffffffff88811692908a16917f26eeb9a45fc0ed1a714977219563a1ae73a8da96bc19e08479dab98729dec65a910160405180910390a350505050505050565b60606109e5610582565b604080517f247e6797654d5fd2cb7b467724cabc2b14be5382309752af66c95151824a9583602082015273ffffffffffffffffffffffffffffffffffffffff808916928201929092529086166060820152841515608082015260a0810184905260c00160405160208183030381529060405280519060200120604051602001610aa09291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6040516020818303038152906040529050949350505050565b6000806000610ac88585610c73565b91509150610ad581610cb8565b509392505050565b606082471015610b6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103b4565b73ffffffffffffffffffffffffffffffffffffffff85163b610bed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103b4565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c1691906113dc565b60006040518083038185875af1925050503d8060008114610c53576040519150601f19603f3d011682016040523d82523d6000602084013e610c58565b606091505b5091509150610c68828286610f0f565b979650505050505050565b6000808251604103610ca95760208301516040840151606085015160001a610c9d87828585610f62565b94509450505050610cb1565b506000905060025b9250929050565b6000816004811115610ccc57610ccc6113f8565b03610cd45750565b6001816004811115610ce857610ce86113f8565b03610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103b4565b6002816004811115610d6357610d636113f8565b03610dca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103b4565b6003816004811115610dde57610dde6113f8565b03610e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016103b4565b6004816004811115610e7f57610e7f6113f8565b03610f0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016103b4565b50565b60608315610f1e575081610871565b825115610f2e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b49190611427565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f995750600090506003611071565b8460ff16601b14158015610fb157508460ff16601c14155b15610fc25750600090506004611071565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611016573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661106a57600060019250925050611071565b9150600090505b94509492505050565b60008083601f84011261108c57600080fd5b50813567ffffffffffffffff8111156110a457600080fd5b602083019150836020828501011115610cb157600080fd5b803580151581146110cc57600080fd5b919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146110cc57600080fd5b6000806000806000806080878903121561110e57600080fd5b863567ffffffffffffffff8082111561112657600080fd5b6111328a838b0161107a565b909850965086915061114660208a016110bc565b955061115460408a016110d1565b9450606089013591508082111561116a57600080fd5b5061117789828a0161107a565b979a9699509497509295939492505050565b60006020828403121561119b57600080fd5b610871826110d1565b6000806000604084860312156111b957600080fd5b6111c2846110d1565b9250602084013567ffffffffffffffff8111156111de57600080fd5b6111ea8682870161107a565b9497909650939450505050565b6000806040838503121561120a57600080fd5b611213836110d1565b9150611221602084016110d1565b90509250929050565b60008060008060006080868803121561124257600080fd5b61124b866110d1565b9450611259602087016110bc565b9350604086013567ffffffffffffffff81111561127557600080fd5b6112818882890161107a565b90945092506112949050606087016110bc565b90509295509295909350565b8284823760609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169101908152601401919050565b60005b838110156112f45781810151838201526020016112dc565b50506000910152565b600081518084526113158160208601602086016112d9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b82815260406020820152600061086e60408301846112fd565b60006020828403121561137257600080fd5b81517fffffffff000000000000000000000000000000000000000000000000000000008116811461087157600080fd5b80820180821115610480577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082516113ee8184602087016112d9565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208152600061087160208301846112fd56fe416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564a2646970667358221220a34d1c47b4de79fcc7581589f24d70beb932e094b702f5c27ee04fca4a9b2a2964736f6c63430008100033",
  "linkReferences": {},
  "deployedLinkReferences": {},
  "devdoc": {
    "kind": "dev",
    "methods": {
      "DOMAIN_SEPARATOR()": {
        "details": "Return the DOMAIN_SEPARATOR."
      },
      "approveAndForward(bytes,bool,address,bytes)": {
        "params": {
          "data": "the content of the call (the signer address will be appended to it).",
          "isEIP1271Signature": "true if the signer is a contract that require authorization via EIP-1271",
          "signature": "signature by signer for approving forwarder.",
          "target": "destination of the call (that will receive the meta transaction)."
        }
      },
      "approveForwarder(address,bool,bytes,bool)": {
        "params": {
          "approved": "whether to approve or disapprove (if previously approved) the forwarder.",
          "forwarderToChangeApproval": "address of the forwarder to approve",
          "isEIP1271Signature": "true if the signer is a contract that require authorization via EIP-1271",
          "signature": "signature by signer for approving forwarder."
        }
      },
      "checkApprovalAndForward(bytes,bool,address,bytes)": {
        "params": {
          "data": "the content of the call (the signer address will be appended to it).",
          "isEIP1271Signature": "true if the signer is a contract that require authorization via EIP-1271",
          "signature": "signature by signer for approving forwarder.",
          "target": "destination of the call (that will receive the meta transaction)."
        }
      },
      "forward(address,bytes)": {
        "params": {
          "data": "the content of the call (the signer address will be appended to it).",
          "target": "destination of the call (that will receive the meta transaction)."
        }
      },
      "getNonce(address,address)": {
        "params": {
          "forwarder": "meta transaction forwarder contract address.",
          "signer": "signer who authorize/dauthorize forwarders"
        }
      },
      "isApprovedForwarder(address,address)": {
        "params": {
          "forwarder": "meta transaction forwarder contract address.",
          "signer": "signer who authorized or not the forwarder."
        }
      }
    },
    "version": 1
  },
  "evm": {
    "bytecode": {
      "functionDebugData": {
        "@_1265": {
          "entryPoint": null,
          "id": 1265,
          "parameterSlots": 0,
          "returnSlots": 0
        },
        "@_calculateDomainSeparator_1521": {
          "entryPoint": null,
          "id": 1521,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 5,
          "returnSlots": 1
        }
      },
      "generatedSources": [
        {
          "ast": {
            "nodeType": "YulBlock",
            "src": "0:433:12",
            "statements": [
              {
                "nodeType": "YulBlock",
                "src": "6:3:12",
                "statements": []
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "199:232:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "209:27:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "221:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "232:3:12",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "217:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "217:19:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "209:4:12"
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "252:9:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "263:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "245:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "245:25:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "245:25:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "290:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "301:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "286:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "286:18:12"
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "306:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "279:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "279:34:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "279:34:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "333:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "344:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "329:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "329:18:12"
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "349:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "322:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "322:34:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "322:34:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "376:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "387:2:12",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "372:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "372:18:12"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value3",
                                "nodeType": "YulIdentifier",
                                "src": "396:6:12"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "412:3:12",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "417:1:12",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "408:3:12"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "408:11:12"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "421:1:12",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "404:3:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "404:19:12"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "392:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "392:32:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "365:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "365:60:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "365:60:12"
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "144:9:12",
                    "type": ""
                  },
                  {
                    "name": "value3",
                    "nodeType": "YulTypedName",
                    "src": "155:6:12",
                    "type": ""
                  },
                  {
                    "name": "value2",
                    "nodeType": "YulTypedName",
                    "src": "163:6:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "171:6:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "179:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "190:4:12",
                    "type": ""
                  }
                ],
                "src": "14:417:12"
              }
            ]
          },
          "contents": "{\n    { }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, sub(shl(160, 1), 1)))\n    }\n}",
          "id": 12,
          "language": "Yul",
          "name": "#utility.yul"
        }
      ],
      "linkReferences": {},
      "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CHAINID PUSH1 0x80 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x8CAD95687BA82C2CE50E74F7B754645E5117C3A5BEC8151C0726D5857980A866 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x6A520FDA4CA688235391B02E357C6A65EB2A3BB40A69C0199F3F7F9CCCEE041 DUP3 DUP5 ADD MSTORE PUSH1 0x60 DUP3 ADD DUP6 SWAP1 MSTORE ADDRESS DUP3 DUP6 ADD MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP5 ADD DUP5 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 PUSH1 0xA0 MSTORE POP PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x1499 PUSH2 0xB6 PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x62E ADD MSTORE PUSH1 0x0 PUSH2 0x587 ADD MSTORE PUSH2 0x1499 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8929A8CA GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x8929A8CA EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0x9438F7F3 EQ PUSH2 0x121 JUMPI DUP1 PUSH4 0xD828435D EQ PUSH2 0x134 JUMPI DUP1 PUSH4 0xD9E07567 EQ PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x3B7136E7 EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x572B6C05 EQ PUSH2 0xBD JUMPI DUP1 PUSH4 0x6FADCF72 EQ PUSH2 0xEE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x95 PUSH2 0x1C6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xBB PUSH2 0xB6 CALLDATASIZE PUSH1 0x4 PUSH2 0x10F5 JUMP JUMPDEST PUSH2 0x1D5 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0xD8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1189 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9F JUMP JUMPDEST PUSH2 0xBB PUSH2 0xFC CALLDATASIZE PUSH1 0x4 PUSH2 0x11A4 JUMP JUMPDEST PUSH2 0x2ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0x11C CALLDATASIZE PUSH1 0x4 PUSH2 0x11F7 JUMP JUMPDEST PUSH2 0x428 JUMP JUMPDEST PUSH2 0xBB PUSH2 0x12F CALLDATASIZE PUSH1 0x4 PUSH2 0x10F5 JUMP JUMPDEST PUSH2 0x486 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x95 PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0x11F7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBB PUSH2 0x1C1 CALLDATASIZE PUSH1 0x4 PUSH2 0x122A JUMP JUMPDEST PUSH2 0x518 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D0 PUSH2 0x582 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC CALLDATASIZE ADD CALLDATALOAD PUSH1 0x60 SHR PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD DUP2 MLOAD PUSH1 0x1F DUP12 ADD DUP5 SWAP1 DIV DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP10 DUP3 MSTORE PUSH2 0x27E SWAP3 DUP6 SWAP3 DUP6 SWAP3 PUSH1 0x1 SWAP3 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 SWAP1 DUP15 SWAP1 DUP15 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP15 SWAP3 POP PUSH2 0x654 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2E2 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x296 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x12A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 CALLVALUE PUSH2 0x848 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST CALLDATASIZE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD CALLDATALOAD PUSH1 0x60 SHR PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3BD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A45445F464F525741524445520000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x421 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x3D5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x12A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 CALLVALUE PUSH2 0x848 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD CALLDATALOAD PUSH1 0x60 SHR SWAP1 POP PUSH2 0x4F6 DUP2 CALLER PUSH1 0x1 DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP13 SWAP3 POP PUSH2 0x878 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x50E DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x3D5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x12A0 JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x421 CALLDATASIZE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD CALLDATALOAD PUSH1 0x60 SHR DUP7 DUP7 DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP9 SWAP3 POP PUSH2 0x878 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CHAINID PUSH32 0x0 DUP2 EQ PUSH2 0x62C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8CAD95687BA82C2CE50E74F7B754645E5117C3A5BEC8151C0726D5857980A866 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x6A520FDA4CA688235391B02E357C6A65EB2A3BB40A69C0199F3F7F9CCCEE041 DUP3 DUP5 ADD MSTORE PUSH1 0x60 DUP3 ADD DUP5 SWAP1 MSTORE ADDRESS PUSH1 0x80 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH2 0x64E JUMP JUMPDEST PUSH32 0x0 JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x662 DUP8 DUP8 DUP8 DUP8 PUSH2 0x9DB JUMP JUMPDEST SWAP1 POP DUP2 ISZERO PUSH2 0x794 JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 PUSH4 0x1626BA7E SWAP2 PUSH2 0x6C5 SWAP2 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x1347 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x706 SWAP2 SWAP1 PUSH2 0x1360 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x78F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5349474E41545552455F313237315F494E56414C494400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B4 JUMP JUMPDEST PUSH2 0x83F JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x7A8 SWAP1 DUP6 PUSH2 0xAB9 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x50E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5349474E41545552455F57524F4E475F5349474E455200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B4 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x86E DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x143B PUSH1 0x29 SWAP2 CODECOPY PUSH2 0xADD JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP1 SLOAD PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8D9 DUP8 DUP8 DUP8 DUP5 DUP9 DUP9 PUSH2 0x654 JUMP JUMPDEST DUP2 SLOAD PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 DUP7 ISZERO ISZERO MUL OR DUP3 SSTORE PUSH2 0x92F DUP2 PUSH1 0x1 PUSH2 0x13A2 JUMP JUMPDEST DUP3 SLOAD PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 AND PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x40 DUP1 MLOAD DUP7 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND SWAP3 SWAP1 DUP11 AND SWAP2 PUSH32 0x26EEB9A45FC0ED1A714977219563A1AE73A8DA96BC19E08479DAB98729DEC65A SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x9E5 PUSH2 0x582 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x247E6797654D5FD2CB7B467724CABC2B14BE5382309752AF66C95151824A9583 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP7 AND PUSH1 0x60 DUP3 ADD MSTORE DUP5 ISZERO ISZERO PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xAA0 SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xAC8 DUP6 DUP6 PUSH2 0xC73 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xAD5 DUP2 PUSH2 0xCB8 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0xB6F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x722063616C6C0000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND EXTCODESIZE PUSH2 0xBED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B4 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0xC16 SWAP2 SWAP1 PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xC53 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xC58 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0xC68 DUP3 DUP3 DUP7 PUSH2 0xF0F JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD PUSH1 0x41 SUB PUSH2 0xCA9 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x0 BYTE PUSH2 0xC9D DUP8 DUP3 DUP6 DUP6 PUSH2 0xF62 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP POP POP PUSH2 0xCB1 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP PUSH1 0x2 JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xCCC JUMPI PUSH2 0xCCC PUSH2 0x13F8 JUMP JUMPDEST SUB PUSH2 0xCD4 JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xCE8 JUMPI PUSH2 0xCE8 PUSH2 0x13F8 JUMP JUMPDEST SUB PUSH2 0xD4F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B4 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xD63 JUMPI PUSH2 0xD63 PUSH2 0x13F8 JUMP JUMPDEST SUB PUSH2 0xDCA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B4 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xDDE JUMPI PUSH2 0xDDE PUSH2 0x13F8 JUMP JUMPDEST SUB PUSH2 0xE6B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7565000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B4 JUMP JUMPDEST PUSH1 0x4 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xE7F JUMPI PUSH2 0xE7F PUSH2 0x13F8 JUMP JUMPDEST SUB PUSH2 0xF0C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7565000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B4 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0xF1E JUMPI POP DUP2 PUSH2 0x871 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0xF2E JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3B4 SWAP2 SWAP1 PUSH2 0x1427 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0xF99 JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0x1071 JUMP JUMPDEST DUP5 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0xFB1 JUMPI POP DUP5 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0xFC2 JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x4 PUSH2 0x1071 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1016 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x106A JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0x1071 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x108C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x10A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xCB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x10CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x10CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x110E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1132 DUP11 DUP4 DUP12 ADD PUSH2 0x107A JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP DUP7 SWAP2 POP PUSH2 0x1146 PUSH1 0x20 DUP11 ADD PUSH2 0x10BC JUMP JUMPDEST SWAP6 POP PUSH2 0x1154 PUSH1 0x40 DUP11 ADD PUSH2 0x10D1 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x116A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1177 DUP10 DUP3 DUP11 ADD PUSH2 0x107A JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 SWAP4 SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x119B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x871 DUP3 PUSH2 0x10D1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x11B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11C2 DUP5 PUSH2 0x10D1 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x11DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11EA DUP7 DUP3 DUP8 ADD PUSH2 0x107A JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x120A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1213 DUP4 PUSH2 0x10D1 JUMP JUMPDEST SWAP2 POP PUSH2 0x1221 PUSH1 0x20 DUP5 ADD PUSH2 0x10D1 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1242 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x124B DUP7 PUSH2 0x10D1 JUMP JUMPDEST SWAP5 POP PUSH2 0x1259 PUSH1 0x20 DUP8 ADD PUSH2 0x10BC JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1281 DUP9 DUP3 DUP10 ADD PUSH2 0x107A JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x1294 SWAP1 POP PUSH1 0x60 DUP8 ADD PUSH2 0x10BC JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP3 DUP5 DUP3 CALLDATACOPY PUSH1 0x60 SWAP2 SWAP1 SWAP2 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x14 ADD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x12F4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x12DC JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1315 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x12D9 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x86E PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x12FD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1372 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x871 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x480 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x13EE DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x12D9 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x871 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x12FD JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2063616C6C KECCAK256 PUSH24 0x6974682076616C7565206661696C6564A264697066735822 SLT KECCAK256 LOG3 0x4D SHR SELFBALANCE 0xB4 0xDE PUSH26 0xFCC7581589F24D70BEB932E094B702F5C27EE04FCA4A9B2A2964 PUSH20 0x6F6C634300081000330000000000000000000000 ",
      "sourceMap": "608:7397:8:-:0;;;1437:226;;;;;;;;;-1:-1:-1;1548:9:8;1564:28;;;;6381:162;;;6398:80;6381:162;;;;245:25:12;;;;855:30:8;286:18:12;;;279:34;329:18;;;322:34;;;6532:4:8;372:18:12;;;365:60;6381:162:8;;;;;;;;;;217:19:12;;;;6381:162:8;;;6366:182;;;;;1596:63;;-1:-1:-1;608:7397:8;;;;;;;;;;;;;;;;;;"
    },
    "deployedBytecode": {
      "functionDebugData": {
        "@DOMAIN_SEPARATOR_1477": {
          "entryPoint": 454,
          "id": 1477,
          "parameterSlots": 0,
          "returnSlots": 1
        },
        "@_DOMAIN_SEPARATOR_1497": {
          "entryPoint": 1410,
          "id": 1497,
          "parameterSlots": 0,
          "returnSlots": 1
        },
        "@_approveForwarder_1676": {
          "entryPoint": 2168,
          "id": 1676,
          "parameterSlots": 5,
          "returnSlots": 0
        },
        "@_calculateDomainSeparator_1521": {
          "entryPoint": null,
          "id": 1521,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "@_encodeMessage_1552": {
          "entryPoint": 2523,
          "id": 1552,
          "parameterSlots": 4,
          "returnSlots": 1
        },
        "@_lastAppendedDataAsSender_939": {
          "entryPoint": null,
          "id": 939,
          "parameterSlots": 0,
          "returnSlots": 1
        },
        "@_requireValidSignature_1612": {
          "entryPoint": 1620,
          "id": 1612,
          "parameterSlots": 6,
          "returnSlots": 0
        },
        "@_throwError_584": {
          "entryPoint": 3256,
          "id": 584,
          "parameterSlots": 1,
          "returnSlots": 0
        },
        "@approveAndForward_1415": {
          "entryPoint": 1158,
          "id": 1415,
          "parameterSlots": 6,
          "returnSlots": 0
        },
        "@approveForwarder_1376": {
          "entryPoint": 1304,
          "id": 1376,
          "parameterSlots": 5,
          "returnSlots": 0
        },
        "@checkApprovalAndForward_1467": {
          "entryPoint": 469,
          "id": 1467,
          "parameterSlots": 6,
          "returnSlots": 0
        },
        "@forward_1314": {
          "entryPoint": 749,
          "id": 1314,
          "parameterSlots": 3,
          "returnSlots": 0
        },
        "@functionCallWithValue_108": {
          "entryPoint": 2120,
          "id": 108,
          "parameterSlots": 3,
          "returnSlots": 1
        },
        "@functionCallWithValue_158": {
          "entryPoint": 2781,
          "id": 158,
          "parameterSlots": 4,
          "returnSlots": 1
        },
        "@getNonce_1335": {
          "entryPoint": null,
          "id": 1335,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "@isApprovedForwarder_1354": {
          "entryPoint": 1064,
          "id": 1354,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "@isContract_17": {
          "entryPoint": null,
          "id": 17,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "@isTrustedForwarder_1277": {
          "entryPoint": null,
          "id": 1277,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "@recover_657": {
          "entryPoint": 2745,
          "id": 657,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "@tryRecover_630": {
          "entryPoint": 3187,
          "id": 630,
          "parameterSlots": 2,
          "returnSlots": 2
        },
        "@tryRecover_815": {
          "entryPoint": 3938,
          "id": 815,
          "parameterSlots": 4,
          "returnSlots": 2
        },
        "@verifyCallResult_293": {
          "entryPoint": 3855,
          "id": 293,
          "parameterSlots": 3,
          "returnSlots": 1
        },
        "abi_decode_address": {
          "entryPoint": 4305,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_decode_bool": {
          "entryPoint": 4284,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_decode_bytes_calldata": {
          "entryPoint": 4218,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 2
        },
        "abi_decode_tuple_t_address": {
          "entryPoint": 4489,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "abi_decode_tuple_t_addresst_address": {
          "entryPoint": 4599,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 2
        },
        "abi_decode_tuple_t_addresst_boolt_bytes_calldata_ptrt_bool": {
          "entryPoint": 4650,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 5
        },
        "abi_decode_tuple_t_addresst_bytes_calldata_ptr": {
          "entryPoint": 4516,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 3
        },
        "abi_decode_tuple_t_bytes4_fromMemory": {
          "entryPoint": 4960,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "abi_decode_tuple_t_bytes_calldata_ptrt_boolt_addresst_bytes_calldata_ptr": {
          "entryPoint": 4341,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 6
        },
        "abi_encode_bytes": {
          "entryPoint": 4861,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "abi_encode_tuple_packed_t_bytes_calldata_ptr_t_address__to_t_bytes_memory_ptr_t_address__nonPadded_inplace_fromStack_reversed": {
          "entryPoint": 4768,
          "id": null,
          "parameterSlots": 4,
          "returnSlots": 1
        },
        "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
          "entryPoint": 5084,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 3,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_bool_t_uint256__to_t_bool_t_uint256__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 3,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_bytes32_t_address_t_address_t_bool_t_uint256__to_t_bytes32_t_address_t_address_t_bool_t_uint256__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 6,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 5,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed": {
          "entryPoint": 4935,
          "id": null,
          "parameterSlots": 3,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 5,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": 5159,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_0cf2a7fc56ec00e6022ed4e0801b93ddeefbd6d0d0a9038f759be76a0617b354__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_3df4696469ea65f88b80f2862b5054f5453cef53d22c2aed33ee26568740d228__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_681feb691ce827975a0a638b9095f89820bcd28add729bcdba2cdb15449e0483__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
          "entryPoint": null,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "checked_add_t_uint256": {
          "entryPoint": 5026,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "copy_memory_to_memory_with_cleanup": {
          "entryPoint": 4825,
          "id": null,
          "parameterSlots": 3,
          "returnSlots": 0
        },
        "panic_error_0x21": {
          "entryPoint": 5112,
          "id": null,
          "parameterSlots": 0,
          "returnSlots": 0
        }
      },
      "generatedSources": [
        {
          "ast": {
            "nodeType": "YulBlock",
            "src": "0:11787:12",
            "statements": [
              {
                "nodeType": "YulBlock",
                "src": "6:3:12",
                "statements": []
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "115:76:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "125:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "137:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "148:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "133:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "133:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "125:4:12"
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "167:9:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "178:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "160:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "160:25:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "160:25:12"
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "84:9:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "95:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "106:4:12",
                    "type": ""
                  }
                ],
                "src": "14:177:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "268:275:12",
                  "statements": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "317:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "326:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "329:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "319:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "319:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "319:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "296:6:12"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "304:4:12",
                                    "type": "",
                                    "value": "0x1f"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "292:3:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "292:17:12"
                              },
                              {
                                "name": "end",
                                "nodeType": "YulIdentifier",
                                "src": "311:3:12"
                              }
                            ],
                            "functionName": {
                              "name": "slt",
                              "nodeType": "YulIdentifier",
                              "src": "288:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "288:27:12"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "281:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "281:35:12"
                      },
                      "nodeType": "YulIf",
                      "src": "278:55:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "342:30:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "365:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "352:12:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "352:20:12"
                      },
                      "variableNames": [
                        {
                          "name": "length",
                          "nodeType": "YulIdentifier",
                          "src": "342:6:12"
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "415:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "424:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "427:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "417:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "417:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "417:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "387:6:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "395:18:12",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "384:2:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "384:30:12"
                      },
                      "nodeType": "YulIf",
                      "src": "381:50:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "440:29:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "456:6:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "464:4:12",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "452:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "452:17:12"
                      },
                      "variableNames": [
                        {
                          "name": "arrayPos",
                          "nodeType": "YulIdentifier",
                          "src": "440:8:12"
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "521:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "530:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "533:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "523:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "523:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "523:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "492:6:12"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "500:6:12"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "488:3:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "488:19:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "509:4:12",
                                "type": "",
                                "value": "0x20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "484:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "484:30:12"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "516:3:12"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "481:2:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "481:39:12"
                      },
                      "nodeType": "YulIf",
                      "src": "478:59:12"
                    }
                  ]
                },
                "name": "abi_decode_bytes_calldata",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "offset",
                    "nodeType": "YulTypedName",
                    "src": "231:6:12",
                    "type": ""
                  },
                  {
                    "name": "end",
                    "nodeType": "YulTypedName",
                    "src": "239:3:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "arrayPos",
                    "nodeType": "YulTypedName",
                    "src": "247:8:12",
                    "type": ""
                  },
                  {
                    "name": "length",
                    "nodeType": "YulTypedName",
                    "src": "257:6:12",
                    "type": ""
                  }
                ],
                "src": "196:347:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "594:114:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "604:29:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "626:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "613:12:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "613:20:12"
                      },
                      "variableNames": [
                        {
                          "name": "value",
                          "nodeType": "YulIdentifier",
                          "src": "604:5:12"
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "686:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "695:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "698:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "688:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "688:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "688:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "655:5:12"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "676:5:12"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "669:6:12"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "669:13:12"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "662:6:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "662:21:12"
                              }
                            ],
                            "functionName": {
                              "name": "eq",
                              "nodeType": "YulIdentifier",
                              "src": "652:2:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "652:32:12"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "645:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "645:40:12"
                      },
                      "nodeType": "YulIf",
                      "src": "642:60:12"
                    }
                  ]
                },
                "name": "abi_decode_bool",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "offset",
                    "nodeType": "YulTypedName",
                    "src": "573:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "value",
                    "nodeType": "YulTypedName",
                    "src": "584:5:12",
                    "type": ""
                  }
                ],
                "src": "548:160:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "762:147:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "772:29:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "794:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "781:12:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "781:20:12"
                      },
                      "variableNames": [
                        {
                          "name": "value",
                          "nodeType": "YulIdentifier",
                          "src": "772:5:12"
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "887:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "896:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "899:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "889:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "889:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "889:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "823:5:12"
                              },
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "834:5:12"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "841:42:12",
                                    "type": "",
                                    "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "830:3:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "830:54:12"
                              }
                            ],
                            "functionName": {
                              "name": "eq",
                              "nodeType": "YulIdentifier",
                              "src": "820:2:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "820:65:12"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "813:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "813:73:12"
                      },
                      "nodeType": "YulIf",
                      "src": "810:93:12"
                    }
                  ]
                },
                "name": "abi_decode_address",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "offset",
                    "nodeType": "YulTypedName",
                    "src": "741:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "value",
                    "nodeType": "YulTypedName",
                    "src": "752:5:12",
                    "type": ""
                  }
                ],
                "src": "713:196:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "1070:704:12",
                  "statements": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "1117:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1126:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1129:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "1119:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1119:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "1119:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "dataEnd",
                                "nodeType": "YulIdentifier",
                                "src": "1091:7:12"
                              },
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1100:9:12"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "1087:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1087:23:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1112:3:12",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "1083:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1083:33:12"
                      },
                      "nodeType": "YulIf",
                      "src": "1080:53:12"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1142:37:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1169:9:12"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "1156:12:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1156:23:12"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "1146:6:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1188:28:12",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1198:18:12",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      },
                      "variables": [
                        {
                          "name": "_1",
                          "nodeType": "YulTypedName",
                          "src": "1192:2:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "1243:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1252:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1255:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "1245:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1245:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "1245:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "1231:6:12"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1239:2:12"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "1228:2:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1228:14:12"
                      },
                      "nodeType": "YulIf",
                      "src": "1225:34:12"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1268:84:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1324:9:12"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "1335:6:12"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1320:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1320:22:12"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1344:7:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_bytes_calldata",
                          "nodeType": "YulIdentifier",
                          "src": "1294:25:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1294:58:12"
                      },
                      "variables": [
                        {
                          "name": "value0_1",
                          "nodeType": "YulTypedName",
                          "src": "1272:8:12",
                          "type": ""
                        },
                        {
                          "name": "value1_1",
                          "nodeType": "YulTypedName",
                          "src": "1282:8:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1361:18:12",
                      "value": {
                        "name": "value0_1",
                        "nodeType": "YulIdentifier",
                        "src": "1371:8:12"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "1361:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1388:18:12",
                      "value": {
                        "name": "value1_1",
                        "nodeType": "YulIdentifier",
                        "src": "1398:8:12"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "1388:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1415:45:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1445:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1456:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1441:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1441:18:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_bool",
                          "nodeType": "YulIdentifier",
                          "src": "1425:15:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1425:35:12"
                      },
                      "variableNames": [
                        {
                          "name": "value2",
                          "nodeType": "YulIdentifier",
                          "src": "1415:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1469:48:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1502:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1513:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1498:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1498:18:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_address",
                          "nodeType": "YulIdentifier",
                          "src": "1479:18:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1479:38:12"
                      },
                      "variableNames": [
                        {
                          "name": "value3",
                          "nodeType": "YulIdentifier",
                          "src": "1469:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1526:48:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1559:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1570:2:12",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1555:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1555:18:12"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "1542:12:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1542:32:12"
                      },
                      "variables": [
                        {
                          "name": "offset_1",
                          "nodeType": "YulTypedName",
                          "src": "1530:8:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "1603:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1612:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1615:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "1605:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1605:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "1605:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "1589:8:12"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1599:2:12"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "1586:2:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1586:16:12"
                      },
                      "nodeType": "YulIf",
                      "src": "1583:36:12"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1628:86:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1684:9:12"
                              },
                              {
                                "name": "offset_1",
                                "nodeType": "YulIdentifier",
                                "src": "1695:8:12"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1680:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1680:24:12"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1706:7:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_bytes_calldata",
                          "nodeType": "YulIdentifier",
                          "src": "1654:25:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1654:60:12"
                      },
                      "variables": [
                        {
                          "name": "value4_1",
                          "nodeType": "YulTypedName",
                          "src": "1632:8:12",
                          "type": ""
                        },
                        {
                          "name": "value5_1",
                          "nodeType": "YulTypedName",
                          "src": "1642:8:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1723:18:12",
                      "value": {
                        "name": "value4_1",
                        "nodeType": "YulIdentifier",
                        "src": "1733:8:12"
                      },
                      "variableNames": [
                        {
                          "name": "value4",
                          "nodeType": "YulIdentifier",
                          "src": "1723:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1750:18:12",
                      "value": {
                        "name": "value5_1",
                        "nodeType": "YulIdentifier",
                        "src": "1760:8:12"
                      },
                      "variableNames": [
                        {
                          "name": "value5",
                          "nodeType": "YulIdentifier",
                          "src": "1750:6:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_decode_tuple_t_bytes_calldata_ptrt_boolt_addresst_bytes_calldata_ptr",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "996:9:12",
                    "type": ""
                  },
                  {
                    "name": "dataEnd",
                    "nodeType": "YulTypedName",
                    "src": "1007:7:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "1019:6:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "1027:6:12",
                    "type": ""
                  },
                  {
                    "name": "value2",
                    "nodeType": "YulTypedName",
                    "src": "1035:6:12",
                    "type": ""
                  },
                  {
                    "name": "value3",
                    "nodeType": "YulTypedName",
                    "src": "1043:6:12",
                    "type": ""
                  },
                  {
                    "name": "value4",
                    "nodeType": "YulTypedName",
                    "src": "1051:6:12",
                    "type": ""
                  },
                  {
                    "name": "value5",
                    "nodeType": "YulTypedName",
                    "src": "1059:6:12",
                    "type": ""
                  }
                ],
                "src": "914:860:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "1849:116:12",
                  "statements": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "1895:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1904:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1907:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "1897:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1897:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "1897:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "dataEnd",
                                "nodeType": "YulIdentifier",
                                "src": "1870:7:12"
                              },
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1879:9:12"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "1866:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1866:23:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1891:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "1862:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1862:32:12"
                      },
                      "nodeType": "YulIf",
                      "src": "1859:52:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1920:39:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1949:9:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_address",
                          "nodeType": "YulIdentifier",
                          "src": "1930:18:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1930:29:12"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "1920:6:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_decode_tuple_t_address",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "1815:9:12",
                    "type": ""
                  },
                  {
                    "name": "dataEnd",
                    "nodeType": "YulTypedName",
                    "src": "1826:7:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "1838:6:12",
                    "type": ""
                  }
                ],
                "src": "1779:186:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "2065:92:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "2075:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2087:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2098:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2083:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2083:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "2075:4:12"
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2117:9:12"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2142:6:12"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2135:6:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2135:14:12"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "2128:6:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2128:22:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "2110:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2110:41:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "2110:41:12"
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "2034:9:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "2045:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "2056:4:12",
                    "type": ""
                  }
                ],
                "src": "1970:187:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "2268:377:12",
                  "statements": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "2314:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2323:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2326:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "2316:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2316:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "2316:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "dataEnd",
                                "nodeType": "YulIdentifier",
                                "src": "2289:7:12"
                              },
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2298:9:12"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "2285:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2285:23:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2310:2:12",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "2281:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2281:32:12"
                      },
                      "nodeType": "YulIf",
                      "src": "2278:52:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2339:39:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2368:9:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_address",
                          "nodeType": "YulIdentifier",
                          "src": "2349:18:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2349:29:12"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "2339:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "2387:46:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2418:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2429:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2414:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2414:18:12"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "2401:12:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2401:32:12"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "2391:6:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "2476:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2485:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2488:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "2478:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2478:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "2478:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "2448:6:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2456:18:12",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "2445:2:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2445:30:12"
                      },
                      "nodeType": "YulIf",
                      "src": "2442:50:12"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "2501:84:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2557:9:12"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2568:6:12"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2553:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2553:22:12"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2577:7:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_bytes_calldata",
                          "nodeType": "YulIdentifier",
                          "src": "2527:25:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2527:58:12"
                      },
                      "variables": [
                        {
                          "name": "value1_1",
                          "nodeType": "YulTypedName",
                          "src": "2505:8:12",
                          "type": ""
                        },
                        {
                          "name": "value2_1",
                          "nodeType": "YulTypedName",
                          "src": "2515:8:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2594:18:12",
                      "value": {
                        "name": "value1_1",
                        "nodeType": "YulIdentifier",
                        "src": "2604:8:12"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "2594:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2621:18:12",
                      "value": {
                        "name": "value2_1",
                        "nodeType": "YulIdentifier",
                        "src": "2631:8:12"
                      },
                      "variableNames": [
                        {
                          "name": "value2",
                          "nodeType": "YulIdentifier",
                          "src": "2621:6:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_decode_tuple_t_addresst_bytes_calldata_ptr",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "2218:9:12",
                    "type": ""
                  },
                  {
                    "name": "dataEnd",
                    "nodeType": "YulTypedName",
                    "src": "2229:7:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "2241:6:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "2249:6:12",
                    "type": ""
                  },
                  {
                    "name": "value2",
                    "nodeType": "YulTypedName",
                    "src": "2257:6:12",
                    "type": ""
                  }
                ],
                "src": "2162:483:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "2737:173:12",
                  "statements": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "2783:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2792:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2795:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "2785:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2785:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "2785:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "dataEnd",
                                "nodeType": "YulIdentifier",
                                "src": "2758:7:12"
                              },
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2767:9:12"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "2754:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2754:23:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2779:2:12",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "2750:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2750:32:12"
                      },
                      "nodeType": "YulIf",
                      "src": "2747:52:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2808:39:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2837:9:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_address",
                          "nodeType": "YulIdentifier",
                          "src": "2818:18:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2818:29:12"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "2808:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2856:48:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2889:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2900:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2885:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2885:18:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_address",
                          "nodeType": "YulIdentifier",
                          "src": "2866:18:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2866:38:12"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "2856:6:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_decode_tuple_t_addresst_address",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "2695:9:12",
                    "type": ""
                  },
                  {
                    "name": "dataEnd",
                    "nodeType": "YulTypedName",
                    "src": "2706:7:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "2718:6:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "2726:6:12",
                    "type": ""
                  }
                ],
                "src": "2650:260:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "3016:76:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "3026:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3038:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3049:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3034:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3034:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "3026:4:12"
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3068:9:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "3079:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "3061:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3061:25:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "3061:25:12"
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "2985:9:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "2996:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "3007:4:12",
                    "type": ""
                  }
                ],
                "src": "2915:177:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "3231:486:12",
                  "statements": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "3278:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3287:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3290:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "3280:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3280:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "3280:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "dataEnd",
                                "nodeType": "YulIdentifier",
                                "src": "3252:7:12"
                              },
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3261:9:12"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "3248:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3248:23:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3273:3:12",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "3244:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3244:33:12"
                      },
                      "nodeType": "YulIf",
                      "src": "3241:53:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "3303:39:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3332:9:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_address",
                          "nodeType": "YulIdentifier",
                          "src": "3313:18:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3313:29:12"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "3303:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "3351:45:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3381:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3392:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3377:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3377:18:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_bool",
                          "nodeType": "YulIdentifier",
                          "src": "3361:15:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3361:35:12"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "3351:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "3405:46:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3436:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3447:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3432:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3432:18:12"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "3419:12:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3419:32:12"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "3409:6:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "3494:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3503:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3506:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "3496:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3496:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "3496:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "3466:6:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3474:18:12",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "3463:2:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3463:30:12"
                      },
                      "nodeType": "YulIf",
                      "src": "3460:50:12"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "3519:84:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3575:9:12"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "3586:6:12"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3571:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3571:22:12"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3595:7:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_bytes_calldata",
                          "nodeType": "YulIdentifier",
                          "src": "3545:25:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3545:58:12"
                      },
                      "variables": [
                        {
                          "name": "value2_1",
                          "nodeType": "YulTypedName",
                          "src": "3523:8:12",
                          "type": ""
                        },
                        {
                          "name": "value3_1",
                          "nodeType": "YulTypedName",
                          "src": "3533:8:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "3612:18:12",
                      "value": {
                        "name": "value2_1",
                        "nodeType": "YulIdentifier",
                        "src": "3622:8:12"
                      },
                      "variableNames": [
                        {
                          "name": "value2",
                          "nodeType": "YulIdentifier",
                          "src": "3612:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "3639:18:12",
                      "value": {
                        "name": "value3_1",
                        "nodeType": "YulIdentifier",
                        "src": "3649:8:12"
                      },
                      "variableNames": [
                        {
                          "name": "value3",
                          "nodeType": "YulIdentifier",
                          "src": "3639:6:12"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "3666:45:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3696:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3707:2:12",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3692:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3692:18:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_bool",
                          "nodeType": "YulIdentifier",
                          "src": "3676:15:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3676:35:12"
                      },
                      "variableNames": [
                        {
                          "name": "value4",
                          "nodeType": "YulIdentifier",
                          "src": "3666:6:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_decode_tuple_t_addresst_boolt_bytes_calldata_ptrt_bool",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "3165:9:12",
                    "type": ""
                  },
                  {
                    "name": "dataEnd",
                    "nodeType": "YulTypedName",
                    "src": "3176:7:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "3188:6:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "3196:6:12",
                    "type": ""
                  },
                  {
                    "name": "value2",
                    "nodeType": "YulTypedName",
                    "src": "3204:6:12",
                    "type": ""
                  },
                  {
                    "name": "value3",
                    "nodeType": "YulTypedName",
                    "src": "3212:6:12",
                    "type": ""
                  },
                  {
                    "name": "value4",
                    "nodeType": "YulTypedName",
                    "src": "3220:6:12",
                    "type": ""
                  }
                ],
                "src": "3097:620:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "3897:220:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "3920:3:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "3925:6:12"
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "3933:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "calldatacopy",
                          "nodeType": "YulIdentifier",
                          "src": "3907:12:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3907:33:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "3907:33:12"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "3949:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "3963:3:12"
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "3968:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3959:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3959:16:12"
                      },
                      "variables": [
                        {
                          "name": "_1",
                          "nodeType": "YulTypedName",
                          "src": "3953:2:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "3991:2:12"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4003:2:12",
                                    "type": "",
                                    "value": "96"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "4007:6:12"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "3999:3:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3999:15:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4016:66:12",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "3995:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3995:88:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "3984:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3984:100:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "3984:100:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4093:18:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "4104:2:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4108:2:12",
                            "type": "",
                            "value": "20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4100:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4100:11:12"
                      },
                      "variableNames": [
                        {
                          "name": "end",
                          "nodeType": "YulIdentifier",
                          "src": "4093:3:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_packed_t_bytes_calldata_ptr_t_address__to_t_bytes_memory_ptr_t_address__nonPadded_inplace_fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "pos",
                    "nodeType": "YulTypedName",
                    "src": "3857:3:12",
                    "type": ""
                  },
                  {
                    "name": "value2",
                    "nodeType": "YulTypedName",
                    "src": "3862:6:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "3870:6:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "3878:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "end",
                    "nodeType": "YulTypedName",
                    "src": "3889:3:12",
                    "type": ""
                  }
                ],
                "src": "3722:395:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "4296:174:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4313:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4324:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "4306:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4306:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "4306:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4347:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4358:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4343:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4343:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4363:2:12",
                            "type": "",
                            "value": "24"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "4336:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4336:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "4336:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4386:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4397:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4382:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4382:18:12"
                          },
                          {
                            "hexValue": "4e4f545f415554484f52495a45445f464f52574152444552",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "4402:26:12",
                            "type": "",
                            "value": "NOT_AUTHORIZED_FORWARDER"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "4375:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4375:54:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "4375:54:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4438:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4450:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4461:2:12",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4446:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4446:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "4438:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_3df4696469ea65f88b80f2862b5054f5453cef53d22c2aed33ee26568740d228__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "4273:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "4287:4:12",
                    "type": ""
                  }
                ],
                "src": "4122:348:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "4541:184:12",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "4551:10:12",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4560:1:12",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "i",
                          "nodeType": "YulTypedName",
                          "src": "4555:1:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "4620:63:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "dst",
                                      "nodeType": "YulIdentifier",
                                      "src": "4645:3:12"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "4650:1:12"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "4641:3:12"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "4641:11:12"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "4664:3:12"
                                        },
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "4669:1:12"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4660:3:12"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4660:11:12"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "4654:5:12"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "4654:18:12"
                                }
                              ],
                              "functionName": {
                                "name": "mstore",
                                "nodeType": "YulIdentifier",
                                "src": "4634:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4634:39:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "4634:39:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "4581:1:12"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "4584:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "4578:2:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4578:13:12"
                      },
                      "nodeType": "YulForLoop",
                      "post": {
                        "nodeType": "YulBlock",
                        "src": "4592:19:12",
                        "statements": [
                          {
                            "nodeType": "YulAssignment",
                            "src": "4594:15:12",
                            "value": {
                              "arguments": [
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "4603:1:12"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4606:2:12",
                                  "type": "",
                                  "value": "32"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4599:3:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4599:10:12"
                            },
                            "variableNames": [
                              {
                                "name": "i",
                                "nodeType": "YulIdentifier",
                                "src": "4594:1:12"
                              }
                            ]
                          }
                        ]
                      },
                      "pre": {
                        "nodeType": "YulBlock",
                        "src": "4574:3:12",
                        "statements": []
                      },
                      "src": "4570:113:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "dst",
                                "nodeType": "YulIdentifier",
                                "src": "4703:3:12"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "4708:6:12"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4699:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4699:16:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4717:1:12",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "4692:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4692:27:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "4692:27:12"
                    }
                  ]
                },
                "name": "copy_memory_to_memory_with_cleanup",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "src",
                    "nodeType": "YulTypedName",
                    "src": "4519:3:12",
                    "type": ""
                  },
                  {
                    "name": "dst",
                    "nodeType": "YulTypedName",
                    "src": "4524:3:12",
                    "type": ""
                  },
                  {
                    "name": "length",
                    "nodeType": "YulTypedName",
                    "src": "4529:6:12",
                    "type": ""
                  }
                ],
                "src": "4475:250:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "4779:280:12",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "4789:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "4809:5:12"
                          }
                        ],
                        "functionName": {
                          "name": "mload",
                          "nodeType": "YulIdentifier",
                          "src": "4803:5:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4803:12:12"
                      },
                      "variables": [
                        {
                          "name": "length",
                          "nodeType": "YulTypedName",
                          "src": "4793:6:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "4831:3:12"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "4836:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "4824:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4824:19:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "4824:19:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4891:5:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4898:4:12",
                                "type": "",
                                "value": "0x20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4887:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4887:16:12"
                          },
                          {
                            "arguments": [
                              {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "4909:3:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4914:4:12",
                                "type": "",
                                "value": "0x20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4905:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4905:14:12"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "4921:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "copy_memory_to_memory_with_cleanup",
                          "nodeType": "YulIdentifier",
                          "src": "4852:34:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4852:76:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "4852:76:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4937:116:12",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "4952:3:12"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "4965:6:12"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4973:2:12",
                                        "type": "",
                                        "value": "31"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4961:3:12"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4961:15:12"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4978:66:12",
                                    "type": "",
                                    "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "4957:3:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4957:88:12"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4948:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4948:98:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5048:4:12",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4944:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4944:109:12"
                      },
                      "variableNames": [
                        {
                          "name": "end",
                          "nodeType": "YulIdentifier",
                          "src": "4937:3:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_bytes",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "value",
                    "nodeType": "YulTypedName",
                    "src": "4756:5:12",
                    "type": ""
                  },
                  {
                    "name": "pos",
                    "nodeType": "YulTypedName",
                    "src": "4763:3:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "end",
                    "nodeType": "YulTypedName",
                    "src": "4771:3:12",
                    "type": ""
                  }
                ],
                "src": "4730:329:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "5211:141:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5228:9:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "5239:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "5221:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5221:25:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "5221:25:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5266:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5277:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5262:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5262:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5282:2:12",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "5255:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5255:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "5255:30:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "5294:52:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "5319:6:12"
                          },
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5331:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5342:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5327:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5327:18:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_encode_bytes",
                          "nodeType": "YulIdentifier",
                          "src": "5302:16:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5302:44:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "5294:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "5172:9:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "5183:6:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "5191:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "5202:4:12",
                    "type": ""
                  }
                ],
                "src": "5064:288:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "5437:256:12",
                  "statements": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "5483:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "5492:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "5495:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "5485:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5485:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "5485:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "dataEnd",
                                "nodeType": "YulIdentifier",
                                "src": "5458:7:12"
                              },
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5467:9:12"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "5454:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5454:23:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5479:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "5450:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5450:32:12"
                      },
                      "nodeType": "YulIf",
                      "src": "5447:52:12"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "5508:29:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5527:9:12"
                          }
                        ],
                        "functionName": {
                          "name": "mload",
                          "nodeType": "YulIdentifier",
                          "src": "5521:5:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5521:16:12"
                      },
                      "variables": [
                        {
                          "name": "value",
                          "nodeType": "YulTypedName",
                          "src": "5512:5:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "5647:16:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "5656:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "5659:1:12",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "5649:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5649:12:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "5649:12:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5559:5:12"
                              },
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5570:5:12"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5577:66:12",
                                    "type": "",
                                    "value": "0xffffffff00000000000000000000000000000000000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "5566:3:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5566:78:12"
                              }
                            ],
                            "functionName": {
                              "name": "eq",
                              "nodeType": "YulIdentifier",
                              "src": "5556:2:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5556:89:12"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "5549:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5549:97:12"
                      },
                      "nodeType": "YulIf",
                      "src": "5546:117:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "5672:15:12",
                      "value": {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "5682:5:12"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "5672:6:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_decode_tuple_t_bytes4_fromMemory",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "5403:9:12",
                    "type": ""
                  },
                  {
                    "name": "dataEnd",
                    "nodeType": "YulTypedName",
                    "src": "5414:7:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "5426:6:12",
                    "type": ""
                  }
                ],
                "src": "5357:336:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "5872:172:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5889:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5900:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "5882:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5882:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "5882:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5923:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5934:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5919:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5919:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5939:2:12",
                            "type": "",
                            "value": "22"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "5912:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5912:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "5912:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5962:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5973:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5958:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5958:18:12"
                          },
                          {
                            "hexValue": "5349474e41545552455f313237315f494e56414c4944",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "5978:24:12",
                            "type": "",
                            "value": "SIGNATURE_1271_INVALID"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "5951:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5951:52:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "5951:52:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "6012:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6024:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6035:2:12",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6020:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6020:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "6012:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_0cf2a7fc56ec00e6022ed4e0801b93ddeefbd6d0d0a9038f759be76a0617b354__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "5849:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "5863:4:12",
                    "type": ""
                  }
                ],
                "src": "5698:346:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "6223:172:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6240:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6251:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "6233:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6233:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "6233:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "6274:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6285:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6270:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6270:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6290:2:12",
                            "type": "",
                            "value": "22"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "6263:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6263:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "6263:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "6313:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6324:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6309:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6309:18:12"
                          },
                          {
                            "hexValue": "5349474e41545552455f57524f4e475f5349474e4552",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "6329:24:12",
                            "type": "",
                            "value": "SIGNATURE_WRONG_SIGNER"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "6302:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6302:52:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "6302:52:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "6363:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6375:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6386:2:12",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6371:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6371:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "6363:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_681feb691ce827975a0a638b9095f89820bcd28add729bcdba2cdb15449e0483__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "6200:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "6214:4:12",
                    "type": ""
                  }
                ],
                "src": "6049:346:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "6448:231:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "6458:16:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "6469:1:12"
                          },
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "6472:1:12"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6465:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6465:9:12"
                      },
                      "variableNames": [
                        {
                          "name": "sum",
                          "nodeType": "YulIdentifier",
                          "src": "6458:3:12"
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "6505:168:12",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "6526:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "6529:77:12",
                                  "type": "",
                                  "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
                                }
                              ],
                              "functionName": {
                                "name": "mstore",
                                "nodeType": "YulIdentifier",
                                "src": "6519:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "6519:88:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "6519:88:12"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "6627:1:12",
                                  "type": "",
                                  "value": "4"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "6630:4:12",
                                  "type": "",
                                  "value": "0x11"
                                }
                              ],
                              "functionName": {
                                "name": "mstore",
                                "nodeType": "YulIdentifier",
                                "src": "6620:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "6620:15:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "6620:15:12"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "6655:1:12",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "6658:4:12",
                                  "type": "",
                                  "value": "0x24"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "6648:6:12"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "6648:15:12"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "6648:15:12"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "6489:1:12"
                          },
                          {
                            "name": "sum",
                            "nodeType": "YulIdentifier",
                            "src": "6492:3:12"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "6486:2:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6486:10:12"
                      },
                      "nodeType": "YulIf",
                      "src": "6483:190:12"
                    }
                  ]
                },
                "name": "checked_add_t_uint256",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "x",
                    "nodeType": "YulTypedName",
                    "src": "6431:1:12",
                    "type": ""
                  },
                  {
                    "name": "y",
                    "nodeType": "YulTypedName",
                    "src": "6434:1:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "sum",
                    "nodeType": "YulTypedName",
                    "src": "6440:3:12",
                    "type": ""
                  }
                ],
                "src": "6400:279:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "6807:135:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "6817:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6829:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6840:2:12",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6825:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6825:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "6817:4:12"
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6859:9:12"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6884:6:12"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "6877:6:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6877:14:12"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "6870:6:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6870:22:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "6852:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6852:41:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "6852:41:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "6913:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6924:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6909:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6909:18:12"
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "6929:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "6902:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6902:34:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "6902:34:12"
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_bool_t_uint256__to_t_bool_t_uint256__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "6768:9:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "6779:6:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "6787:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "6798:4:12",
                    "type": ""
                  }
                ],
                "src": "6684:258:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "7132:255:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "7142:27:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7154:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7165:3:12",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7150:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7150:19:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "7142:4:12"
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7185:9:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "7196:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7178:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7178:25:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7178:25:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7223:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7234:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7219:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7219:18:12"
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "7239:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7212:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7212:34:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7212:34:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7266:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7277:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7262:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7262:18:12"
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "7282:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7255:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7255:34:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7255:34:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7309:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7320:2:12",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7305:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7305:18:12"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value3",
                                "nodeType": "YulIdentifier",
                                "src": "7329:6:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7337:42:12",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "7325:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7325:55:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7298:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7298:83:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7298:83:12"
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "7077:9:12",
                    "type": ""
                  },
                  {
                    "name": "value3",
                    "nodeType": "YulTypedName",
                    "src": "7088:6:12",
                    "type": ""
                  },
                  {
                    "name": "value2",
                    "nodeType": "YulTypedName",
                    "src": "7096:6:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "7104:6:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "7112:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "7123:4:12",
                    "type": ""
                  }
                ],
                "src": "6947:440:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "7599:345:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "7609:27:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7621:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7632:3:12",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7617:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7617:19:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "7609:4:12"
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7652:9:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "7663:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7645:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7645:25:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7645:25:12"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "7679:52:12",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7689:42:12",
                        "type": "",
                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                      },
                      "variables": [
                        {
                          "name": "_1",
                          "nodeType": "YulTypedName",
                          "src": "7683:2:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7751:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7762:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7747:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7747:18:12"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value1",
                                "nodeType": "YulIdentifier",
                                "src": "7771:6:12"
                              },
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "7779:2:12"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "7767:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7767:15:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7740:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7740:43:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7740:43:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7803:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7814:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7799:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7799:18:12"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value2",
                                "nodeType": "YulIdentifier",
                                "src": "7823:6:12"
                              },
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "7831:2:12"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "7819:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7819:15:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7792:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7792:43:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7792:43:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7855:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7866:2:12",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7851:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7851:18:12"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "7885:6:12"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "7878:6:12"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7878:14:12"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "7871:6:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7871:22:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7844:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7844:50:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7844:50:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7914:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7925:3:12",
                                "type": "",
                                "value": "128"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7910:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7910:19:12"
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulIdentifier",
                            "src": "7931:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "7903:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7903:35:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "7903:35:12"
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_bytes32_t_address_t_address_t_bool_t_uint256__to_t_bytes32_t_address_t_address_t_bool_t_uint256__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "7536:9:12",
                    "type": ""
                  },
                  {
                    "name": "value4",
                    "nodeType": "YulTypedName",
                    "src": "7547:6:12",
                    "type": ""
                  },
                  {
                    "name": "value3",
                    "nodeType": "YulTypedName",
                    "src": "7555:6:12",
                    "type": ""
                  },
                  {
                    "name": "value2",
                    "nodeType": "YulTypedName",
                    "src": "7563:6:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "7571:6:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "7579:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "7590:4:12",
                    "type": ""
                  }
                ],
                "src": "7392:552:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "8197:196:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "8214:3:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8219:66:12",
                            "type": "",
                            "value": "0x1901000000000000000000000000000000000000000000000000000000000000"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "8207:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8207:79:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "8207:79:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "8306:3:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8311:1:12",
                                "type": "",
                                "value": "2"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8302:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8302:11:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "8315:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "8295:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8295:27:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "8295:27:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "8342:3:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8347:2:12",
                                "type": "",
                                "value": "34"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8338:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8338:12:12"
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "8352:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "8331:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8331:28:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "8331:28:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "8368:19:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "8379:3:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8384:2:12",
                            "type": "",
                            "value": "66"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8375:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8375:12:12"
                      },
                      "variableNames": [
                        {
                          "name": "end",
                          "nodeType": "YulIdentifier",
                          "src": "8368:3:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "pos",
                    "nodeType": "YulTypedName",
                    "src": "8165:3:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "8170:6:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "8178:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "end",
                    "nodeType": "YulTypedName",
                    "src": "8189:3:12",
                    "type": ""
                  }
                ],
                "src": "7949:444:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "8572:228:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8589:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8600:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "8582:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8582:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "8582:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "8623:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8634:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8619:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8619:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8639:2:12",
                            "type": "",
                            "value": "38"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "8612:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8612:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "8612:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "8662:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8673:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8658:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8658:18:12"
                          },
                          {
                            "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "8678:34:12",
                            "type": "",
                            "value": "Address: insufficient balance fo"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "8651:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8651:62:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "8651:62:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "8733:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8744:2:12",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8729:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8729:18:12"
                          },
                          {
                            "hexValue": "722063616c6c",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "8749:8:12",
                            "type": "",
                            "value": "r call"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "8722:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8722:36:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "8722:36:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "8767:27:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8779:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8790:3:12",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8775:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8775:19:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "8767:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "8549:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "8563:4:12",
                    "type": ""
                  }
                ],
                "src": "8398:402:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "8979:179:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8996:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9007:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "8989:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8989:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "8989:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "9030:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9041:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "9026:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9026:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9046:2:12",
                            "type": "",
                            "value": "29"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "9019:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9019:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "9019:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "9069:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9080:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "9065:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9065:18:12"
                          },
                          {
                            "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "9085:31:12",
                            "type": "",
                            "value": "Address: call to non-contract"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "9058:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9058:59:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "9058:59:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "9126:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9138:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9149:2:12",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9134:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9134:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "9126:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "8956:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "8970:4:12",
                    "type": ""
                  }
                ],
                "src": "8805:353:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "9300:150:12",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "9310:27:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "9330:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mload",
                          "nodeType": "YulIdentifier",
                          "src": "9324:5:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9324:13:12"
                      },
                      "variables": [
                        {
                          "name": "length",
                          "nodeType": "YulTypedName",
                          "src": "9314:6:12",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "9385:6:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9393:4:12",
                                "type": "",
                                "value": "0x20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "9381:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9381:17:12"
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "9400:3:12"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "9405:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "copy_memory_to_memory_with_cleanup",
                          "nodeType": "YulIdentifier",
                          "src": "9346:34:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9346:66:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "9346:66:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "9421:23:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "9432:3:12"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "9437:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9428:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9428:16:12"
                      },
                      "variableNames": [
                        {
                          "name": "end",
                          "nodeType": "YulIdentifier",
                          "src": "9421:3:12"
                        }
                      ]
                    }
                  ]
                },
                "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": "9276:3:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "9281:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "end",
                    "nodeType": "YulTypedName",
                    "src": "9292:3:12",
                    "type": ""
                  }
                ],
                "src": "9163:287:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "9487:152:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9504:1:12",
                            "type": "",
                            "value": "0"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9507:77:12",
                            "type": "",
                            "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "9497:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9497:88:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "9497:88:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9601:1:12",
                            "type": "",
                            "value": "4"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9604:4:12",
                            "type": "",
                            "value": "0x21"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "9594:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9594:15:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "9594:15:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9625:1:12",
                            "type": "",
                            "value": "0"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9628:4:12",
                            "type": "",
                            "value": "0x24"
                          }
                        ],
                        "functionName": {
                          "name": "revert",
                          "nodeType": "YulIdentifier",
                          "src": "9618:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9618:15:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "9618:15:12"
                    }
                  ]
                },
                "name": "panic_error_0x21",
                "nodeType": "YulFunctionDefinition",
                "src": "9455:184:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "9818:174:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9835:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9846:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "9828:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9828:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "9828:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "9869:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9880:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "9865:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9865:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9885:2:12",
                            "type": "",
                            "value": "24"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "9858:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9858:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "9858:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "9908:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9919:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "9904:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9904:18:12"
                          },
                          {
                            "hexValue": "45434453413a20696e76616c6964207369676e6174757265",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "9924:26:12",
                            "type": "",
                            "value": "ECDSA: invalid signature"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "9897:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9897:54:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "9897:54:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "9960:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9972:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9983:2:12",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9968:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9968:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "9960:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "9795:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "9809:4:12",
                    "type": ""
                  }
                ],
                "src": "9644:348:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "10171:181:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10188:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10199:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "10181:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10181:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "10181:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "10222:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10233:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "10218:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10218:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10238:2:12",
                            "type": "",
                            "value": "31"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "10211:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10211:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "10211:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "10261:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10272:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "10257:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10257:18:12"
                          },
                          {
                            "hexValue": "45434453413a20696e76616c6964207369676e6174757265206c656e677468",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "10277:33:12",
                            "type": "",
                            "value": "ECDSA: invalid signature length"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "10250:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10250:61:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "10250:61:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "10320:26:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10332:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10343:2:12",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10328:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10328:18:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "10320:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "10148:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "10162:4:12",
                    "type": ""
                  }
                ],
                "src": "9997:355:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "10531:224:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10548:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10559:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "10541:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10541:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "10541:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "10582:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10593:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "10578:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10578:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10598:2:12",
                            "type": "",
                            "value": "34"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "10571:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10571:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "10571:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "10621:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10632:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "10617:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10617:18:12"
                          },
                          {
                            "hexValue": "45434453413a20696e76616c6964207369676e6174757265202773272076616c",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "10637:34:12",
                            "type": "",
                            "value": "ECDSA: invalid signature 's' val"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "10610:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10610:62:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "10610:62:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "10692:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10703:2:12",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "10688:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10688:18:12"
                          },
                          {
                            "hexValue": "7565",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "10708:4:12",
                            "type": "",
                            "value": "ue"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "10681:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10681:32:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "10681:32:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "10722:27:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10734:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10745:3:12",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10730:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10730:19:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "10722:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "10508:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "10522:4:12",
                    "type": ""
                  }
                ],
                "src": "10357:398:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "10934:224:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10951:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10962:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "10944:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10944:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "10944:21:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "10985:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10996:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "10981:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10981:18:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11001:2:12",
                            "type": "",
                            "value": "34"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "10974:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10974:30:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "10974:30:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "11024:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11035:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "11020:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11020:18:12"
                          },
                          {
                            "hexValue": "45434453413a20696e76616c6964207369676e6174757265202776272076616c",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "11040:34:12",
                            "type": "",
                            "value": "ECDSA: invalid signature 'v' val"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "11013:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11013:62:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "11013:62:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "11095:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11106:2:12",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "11091:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11091:18:12"
                          },
                          {
                            "hexValue": "7565",
                            "kind": "string",
                            "nodeType": "YulLiteral",
                            "src": "11111:4:12",
                            "type": "",
                            "value": "ue"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "11084:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11084:32:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "11084:32:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "11125:27:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11137:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11148:3:12",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11133:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11133:19:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "11125:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "10911:9:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "10925:4:12",
                    "type": ""
                  }
                ],
                "src": "10760:398:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "11284:98:12",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11301:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11312:2:12",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "11294:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11294:21:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "11294:21:12"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "11324:52:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "11349:6:12"
                          },
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "11361:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11372:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "11357:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11357:18:12"
                          }
                        ],
                        "functionName": {
                          "name": "abi_encode_bytes",
                          "nodeType": "YulIdentifier",
                          "src": "11332:16:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11332:44:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "11324:4:12"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "11253:9:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "11264:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "11275:4:12",
                    "type": ""
                  }
                ],
                "src": "11163:219:12"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "11568:217:12",
                  "statements": [
                    {
                      "nodeType": "YulAssignment",
                      "src": "11578:27:12",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11590:9:12"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11601:3:12",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11586:3:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11586:19:12"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "11578:4:12"
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11621:9:12"
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "11632:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "11614:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11614:25:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "11614:25:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "11659:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11670:2:12",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "11655:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11655:18:12"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value1",
                                "nodeType": "YulIdentifier",
                                "src": "11679:6:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11687:4:12",
                                "type": "",
                                "value": "0xff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "11675:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11675:17:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "11648:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11648:45:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "11648:45:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "11713:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11724:2:12",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "11709:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11709:18:12"
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "11729:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "11702:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11702:34:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "11702:34:12"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "11756:9:12"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11767:2:12",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "11752:3:12"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11752:18:12"
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulIdentifier",
                            "src": "11772:6:12"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "11745:6:12"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11745:34:12"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "11745:34:12"
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "11513:9:12",
                    "type": ""
                  },
                  {
                    "name": "value3",
                    "nodeType": "YulTypedName",
                    "src": "11524:6:12",
                    "type": ""
                  },
                  {
                    "name": "value2",
                    "nodeType": "YulTypedName",
                    "src": "11532:6:12",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "11540:6:12",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "11548:6:12",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "11559:4:12",
                    "type": ""
                  }
                ],
                "src": "11387:398:12"
              }
            ]
          },
          "contents": "{\n    { }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_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_bool(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bytes_calldata_ptrt_boolt_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        value2 := abi_decode_bool(add(headStart, 32))\n        value3 := abi_decode_address(add(headStart, 64))\n        let offset_1 := calldataload(add(headStart, 96))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value4_1, value5_1 := abi_decode_bytes_calldata(add(headStart, offset_1), dataEnd)\n        value4 := value4_1\n        value5 := value5_1\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(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_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_boolt_bytes_calldata_ptrt_bool(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_bool(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n        value4 := abi_decode_bool(add(headStart, 96))\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr_t_address__to_t_bytes_memory_ptr_t_address__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, and(shl(96, value2), 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000))\n        end := add(_1, 20)\n    }\n    function abi_encode_tuple_t_stringliteral_3df4696469ea65f88b80f2862b5054f5453cef53d22c2aed33ee26568740d228__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"NOT_AUTHORIZED_FORWARDER\")\n        tail := add(headStart, 96)\n    }\n    function copy_memory_to_memory_with_cleanup(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        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_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_decode_tuple_t_bytes4_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, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_0cf2a7fc56ec00e6022ed4e0801b93ddeefbd6d0d0a9038f759be76a0617b354__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"SIGNATURE_1271_INVALID\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_681feb691ce827975a0a638b9095f89820bcd28add729bcdba2cdb15449e0483__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"SIGNATURE_WRONG_SIGNER\")\n        tail := add(headStart, 96)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_bool_t_uint256__to_t_bool_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_t_bool_t_uint256__to_t_bytes32_t_address_t_address_t_bool_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), iszero(iszero(value3)))\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-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_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature 's' val\")\n        mstore(add(headStart, 96), \"ue\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature 'v' val\")\n        mstore(add(headStart, 96), \"ue\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n}",
          "id": 12,
          "language": "Yul",
          "name": "#utility.yul"
        }
      ],
      "immutableReferences": {
        "1222": [
          {
            "length": 32,
            "start": 1415
          }
        ],
        "1224": [
          {
            "length": 32,
            "start": 1582
          }
        ]
      },
      "linkReferences": {},
      "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8929A8CA GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x8929A8CA EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0x9438F7F3 EQ PUSH2 0x121 JUMPI DUP1 PUSH4 0xD828435D EQ PUSH2 0x134 JUMPI DUP1 PUSH4 0xD9E07567 EQ PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x3B7136E7 EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x572B6C05 EQ PUSH2 0xBD JUMPI DUP1 PUSH4 0x6FADCF72 EQ PUSH2 0xEE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x95 PUSH2 0x1C6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xBB PUSH2 0xB6 CALLDATASIZE PUSH1 0x4 PUSH2 0x10F5 JUMP JUMPDEST PUSH2 0x1D5 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0xD8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1189 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9F JUMP JUMPDEST PUSH2 0xBB PUSH2 0xFC CALLDATASIZE PUSH1 0x4 PUSH2 0x11A4 JUMP JUMPDEST PUSH2 0x2ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0x11C CALLDATASIZE PUSH1 0x4 PUSH2 0x11F7 JUMP JUMPDEST PUSH2 0x428 JUMP JUMPDEST PUSH2 0xBB PUSH2 0x12F CALLDATASIZE PUSH1 0x4 PUSH2 0x10F5 JUMP JUMPDEST PUSH2 0x486 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x95 PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0x11F7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBB PUSH2 0x1C1 CALLDATASIZE PUSH1 0x4 PUSH2 0x122A JUMP JUMPDEST PUSH2 0x518 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D0 PUSH2 0x582 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC CALLDATASIZE ADD CALLDATALOAD PUSH1 0x60 SHR PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD DUP2 MLOAD PUSH1 0x1F DUP12 ADD DUP5 SWAP1 DIV DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP10 DUP3 MSTORE PUSH2 0x27E SWAP3 DUP6 SWAP3 DUP6 SWAP3 PUSH1 0x1 SWAP3 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 SWAP1 DUP15 SWAP1 DUP15 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP15 SWAP3 POP PUSH2 0x654 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2E2 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x296 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x12A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 CALLVALUE PUSH2 0x848 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST CALLDATASIZE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD CALLDATALOAD PUSH1 0x60 SHR PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3BD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A45445F464F525741524445520000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x421 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x3D5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x12A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 CALLVALUE PUSH2 0x848 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLDATASIZE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD CALLDATALOAD PUSH1 0x60 SHR SWAP1 POP PUSH2 0x4F6 DUP2 CALLER PUSH1 0x1 DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP13 SWAP3 POP PUSH2 0x878 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x50E DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x3D5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x12A0 JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x421 CALLDATASIZE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD CALLDATALOAD PUSH1 0x60 SHR DUP7 DUP7 DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP9 SWAP3 POP PUSH2 0x878 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CHAINID PUSH32 0x0 DUP2 EQ PUSH2 0x62C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8CAD95687BA82C2CE50E74F7B754645E5117C3A5BEC8151C0726D5857980A866 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x6A520FDA4CA688235391B02E357C6A65EB2A3BB40A69C0199F3F7F9CCCEE041 DUP3 DUP5 ADD MSTORE PUSH1 0x60 DUP3 ADD DUP5 SWAP1 MSTORE ADDRESS PUSH1 0x80 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH2 0x64E JUMP JUMPDEST PUSH32 0x0 JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x662 DUP8 DUP8 DUP8 DUP8 PUSH2 0x9DB JUMP JUMPDEST SWAP1 POP DUP2 ISZERO PUSH2 0x794 JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 PUSH4 0x1626BA7E SWAP2 PUSH2 0x6C5 SWAP2 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x1347 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x706 SWAP2 SWAP1 PUSH2 0x1360 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x78F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5349474E41545552455F313237315F494E56414C494400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B4 JUMP JUMPDEST PUSH2 0x83F JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x7A8 SWAP1 DUP6 PUSH2 0xAB9 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x50E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5349474E41545552455F57524F4E475F5349474E455200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B4 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x86E DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x143B PUSH1 0x29 SWAP2 CODECOPY PUSH2 0xADD JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP1 SLOAD PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8D9 DUP8 DUP8 DUP8 DUP5 DUP9 DUP9 PUSH2 0x654 JUMP JUMPDEST DUP2 SLOAD PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 DUP7 ISZERO ISZERO MUL OR DUP3 SSTORE PUSH2 0x92F DUP2 PUSH1 0x1 PUSH2 0x13A2 JUMP JUMPDEST DUP3 SLOAD PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 AND PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x40 DUP1 MLOAD DUP7 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND SWAP3 SWAP1 DUP11 AND SWAP2 PUSH32 0x26EEB9A45FC0ED1A714977219563A1AE73A8DA96BC19E08479DAB98729DEC65A SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x9E5 PUSH2 0x582 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x247E6797654D5FD2CB7B467724CABC2B14BE5382309752AF66C95151824A9583 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP7 AND PUSH1 0x60 DUP3 ADD MSTORE DUP5 ISZERO ISZERO PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xAA0 SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xAC8 DUP6 DUP6 PUSH2 0xC73 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xAD5 DUP2 PUSH2 0xCB8 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0xB6F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x722063616C6C0000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND EXTCODESIZE PUSH2 0xBED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B4 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0xC16 SWAP2 SWAP1 PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xC53 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xC58 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0xC68 DUP3 DUP3 DUP7 PUSH2 0xF0F JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD PUSH1 0x41 SUB PUSH2 0xCA9 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x0 BYTE PUSH2 0xC9D DUP8 DUP3 DUP6 DUP6 PUSH2 0xF62 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP POP POP PUSH2 0xCB1 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP PUSH1 0x2 JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xCCC JUMPI PUSH2 0xCCC PUSH2 0x13F8 JUMP JUMPDEST SUB PUSH2 0xCD4 JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xCE8 JUMPI PUSH2 0xCE8 PUSH2 0x13F8 JUMP JUMPDEST SUB PUSH2 0xD4F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B4 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xD63 JUMPI PUSH2 0xD63 PUSH2 0x13F8 JUMP JUMPDEST SUB PUSH2 0xDCA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B4 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xDDE JUMPI PUSH2 0xDDE PUSH2 0x13F8 JUMP JUMPDEST SUB PUSH2 0xE6B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7565000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B4 JUMP JUMPDEST PUSH1 0x4 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xE7F JUMPI PUSH2 0xE7F PUSH2 0x13F8 JUMP JUMPDEST SUB PUSH2 0xF0C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202776272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7565000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B4 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0xF1E JUMPI POP DUP2 PUSH2 0x871 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0xF2E JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3B4 SWAP2 SWAP1 PUSH2 0x1427 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0xF99 JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0x1071 JUMP JUMPDEST DUP5 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0xFB1 JUMPI POP DUP5 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0xFC2 JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x4 PUSH2 0x1071 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1016 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x106A JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0x1071 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x108C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x10A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xCB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x10CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x10CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x110E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1132 DUP11 DUP4 DUP12 ADD PUSH2 0x107A JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP DUP7 SWAP2 POP PUSH2 0x1146 PUSH1 0x20 DUP11 ADD PUSH2 0x10BC JUMP JUMPDEST SWAP6 POP PUSH2 0x1154 PUSH1 0x40 DUP11 ADD PUSH2 0x10D1 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x116A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1177 DUP10 DUP3 DUP11 ADD PUSH2 0x107A JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 SWAP4 SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x119B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x871 DUP3 PUSH2 0x10D1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x11B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11C2 DUP5 PUSH2 0x10D1 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x11DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11EA DUP7 DUP3 DUP8 ADD PUSH2 0x107A JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x120A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1213 DUP4 PUSH2 0x10D1 JUMP JUMPDEST SWAP2 POP PUSH2 0x1221 PUSH1 0x20 DUP5 ADD PUSH2 0x10D1 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1242 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x124B DUP7 PUSH2 0x10D1 JUMP JUMPDEST SWAP5 POP PUSH2 0x1259 PUSH1 0x20 DUP8 ADD PUSH2 0x10BC JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1281 DUP9 DUP3 DUP10 ADD PUSH2 0x107A JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x1294 SWAP1 POP PUSH1 0x60 DUP8 ADD PUSH2 0x10BC JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP3 DUP5 DUP3 CALLDATACOPY PUSH1 0x60 SWAP2 SWAP1 SWAP2 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x14 ADD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x12F4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x12DC JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1315 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x12D9 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x86E PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x12FD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1372 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x871 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x480 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x13EE DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x12D9 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x871 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x12FD JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2063616C6C KECCAK256 PUSH24 0x6974682076616C7565206661696C6564A264697066735822 SLT KECCAK256 LOG3 0x4D SHR SELFBALANCE 0xB4 0xDE PUSH26 0xFCC7581589F24D70BEB932E094B702F5C27EE04FCA4A9B2A2964 PUSH20 0x6F6C634300081000330000000000000000000000 ",
      "sourceMap": "608:7397:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5556:94;;;;;;;;;;;;;:::i;:::-;;;160:25:12;;;148:2;133:18;5556:94:8;;;;;;;;5053:461;;;;;;:::i;:::-;;:::i;:::-;;1746:94;;;;;;;;;;-1:-1:-1;1746:94:8;;;;;:::i;:::-;-1:-1:-1;1832:4:8;;1746:94;;;;2135:14:12;;2128:22;2110:41;;2098:2;2083:18;1746:94:8;1970:187:12;2111:279:8;;;;;;:::i;:::-;;:::i;2945:156::-;;;;;;;;;;-1:-1:-1;2945:156:8;;;;;:::i;:::-;;:::i;4263:348::-;;;;;;:::i;:::-;;:::i;2591:145::-;;;;;;;;;;-1:-1:-1;2591:145:8;;;;;:::i;:::-;2695:19;;;;2667:7;2695:19;;;;;;;;;;;:30;;;;;;;;;;;:36;;;;2591:145;3563:288;;;;;;;;;;-1:-1:-1;3563:288:8;;;;;:::i;:::-;;:::i;5556:94::-;5607:7;5627:19;:17;:19::i;:::-;5620:26;;5556:94;:::o;5053:461::-;545:23:5;549:14;545:23;532:37;528:2;524:46;5206:14:8;5357:19;;;;;;;;;;;5274:10;5357:30;;;;;;;;;;:36;5288:147;;;;;;;;;;;;;;;;;;;;;;524:46:5;;5274:10:8;;5340:4;;5357:36;;;;;5288:147;5399:9;;5288:147;;;;;;5399:9;5288:147;;5399:9;5288:147;;;;;;;;;-1:-1:-1;5413:18:8;;-1:-1:-1;5288:22:8;;-1:-1:-1;;5288:147:8:i;:::-;5439:71;5485:4;;5491:6;5468:30;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;5439:28;;;;5500:9;5439:28;:71::i;:::-;;5202:312;;5053:461;;;;;;:::o;2111:279::-;549:14:5;545:23;;532:37;528:2;524:46;2186:14:8;2242:19;;;;;;;;;;;2262:10;2242:31;;;;;;;:40;;;;;;2234:77;;;;;;;4324:2:12;2234:77:8;;;4306:21:12;4363:2;4343:18;;;4336:30;4402:26;4382:18;;;4375:54;4446:18;;2234:77:8;;;;;;;;;2315:71;2361:4;;2367:6;2344:30;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;2315:28;;;;2376:9;2315:28;:71::i;:::-;;2182:208;2111:279;;;:::o;2945:156::-;3058:19;;;;3041:4;3058:19;;;;;;;;;;;:30;;;;;;;;;:39;;;;;;2945:156;;;;;:::o;4263:348::-;4410:14;549::5;545:23;;532:37;528:2;524:46;4410:44:8;;4458:74;4476:6;4484:10;4496:4;4502:9;;4458:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4513:18:8;;-1:-1:-1;4458:17:8;;-1:-1:-1;;4458:74:8:i;:::-;4536:71;4582:4;;4588:6;4565:30;;;;;;;;;;:::i;4536:71::-;;4406:205;4263:348;;;;;;:::o;3563:288::-;3714:133;549:14:5;545:23;;532:37;528:2;524:46;3768:25:8;3798:8;3811:9;;3714:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3825:18:8;;-1:-1:-1;3714:17:8;;-1:-1:-1;;3714:133:8:i;5832:392::-;5884:7;5990:9;6136:18;6125:29;;:95;;6381:162;;;6398:80;6381:162;;;;7178:25:12;;;;855:30:8;7219:18:12;;;7212:34;7262:18;;;7255:34;;;6532:4:8;7305:18:12;;;;7298:83;;;;6381:162:8;;;;;;;;;;7150:19:12;;;;6381:162:8;;;6366:182;;;;;6125:95;;;6157:26;6125:95;6118:102;;;5832:392;:::o;6857:573::-;7036:23;7062:50;7077:6;7085:9;7096:8;7106:5;7062:14;:50::i;:::-;7036:76;;7120:18;7116:311;;;7191:21;;;;;;7158:66;;7228:18;7158:66;;;7228:18;7158:32;;;;794:10;;7158:66;;7214:9;;7158:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:88;;;7145:136;;;;;;;5900:2:12;7145:136:8;;;5882:21:12;5939:2;5919:18;;;5912:30;5978:24;5958:18;;;5951:52;6020:18;;7145:136:8;5698:346:12;7145:136:8;7116:311;;;7320:21;;;;;;7297:20;;7320:40;;7350:9;7320:29;:40::i;:::-;7297:63;;7383:12;7373:22;;:6;:22;;;7365:57;;;;;;;6251:2:12;7365:57:8;;;6233:21:12;6290:2;6270:18;;;6263:30;6329:24;6309:18;;;6302:52;6371:18;;7365:57:8;6049:346:12;7116:311:8;7032:398;6857:573;;;;;;:::o;4446:254:0:-;4575:12;4606:87;4628:6;4636:4;4642:5;4606:87;;;;;;;;;;;;;;;;;:21;:87::i;:::-;4599:94;;4446:254;;;;;;:::o;7433:570:8:-;7635:19;;;;7601:31;7635:19;;;;;;;;;;;:46;;;;;;;;;7709:19;;;;7734:105;7647:6;7655:25;7792:8;7709:19;7809:9;7820:18;7734:22;:105::i;:::-;7844:33;;;;;;;;;;;;7911:9;:5;-1:-1:-1;7911:9:8;:::i;:::-;7881:40;;;;;;;;;;;;7930:69;;;6877:14:12;;6870:22;6852:41;;6924:2;6909:18;;6902:34;;;7930:69:8;;;;;;;;;;;6825:18:12;7930:69:8;;;;;;;7597:406;;7433:570;;;;;:::o;6555:299::-;6678:12;6744:19;:17;:19::i;:::-;6779:65;;;936:91;6779:65;;;7645:25:12;7689:42;7767:15;;;7747:18;;;7740:43;;;;7819:15;;;7799:18;;;7792:43;7878:14;;7871:22;7851:18;;;7844:50;7910:19;;;7903:35;;;7617:19;;6779:65:8;;;;;;;;;;;;6769:76;;;;;;6706:144;;;;;;;;8219:66:12;8207:79;;8311:1;8302:11;;8295:27;;;;8347:2;8338:12;;8331:28;8384:2;8375:12;;7949:444;6706:144:8;;;;;;;;;;;;;6696:154;;6555:299;;;;;;:::o;3759:227:2:-;3837:7;3857:17;3876:18;3898:27;3909:4;3915:9;3898:10;:27::i;:::-;3856:69;;;;3935:18;3947:5;3935:11;:18::i;:::-;-1:-1:-1;3970:9:2;3759:227;-1:-1:-1;;;3759:227:2:o;4948:499:0:-;5113:12;5170:5;5145:21;:30;;5137:81;;;;;;;8600:2:12;5137:81:0;;;8582:21:12;8639:2;8619:18;;;8612:30;8678:34;8658:18;;;8651:62;8749:8;8729:18;;;8722:36;8775:19;;5137:81:0;8398:402:12;5137:81:0;1465:19;;;;5228:60;;;;;;;9007:2:12;5228:60:0;;;8989:21:12;9046:2;9026:18;;;9019:30;9085:31;9065:18;;;9058:59;9134:18;;5228:60:0;8805:353:12;5228:60:0;5300:12;5314:23;5341:6;:11;;5360:5;5367:4;5341:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5299:73;;;;5389:51;5406:7;5415:10;5427:12;5389:16;:51::i;:::-;5382:58;4948:499;-1:-1:-1;;;;;;;4948:499:0:o;2243:730:2:-;2324:7;2333:12;2361:9;:16;2381:2;2361:22;2357:610;;2697:4;2682:20;;2676:27;2746:4;2731:20;;2725:27;2803:4;2788:20;;2782:27;2399:9;2774:36;2844:25;2855:4;2774:36;2676:27;2725;2844:10;:25::i;:::-;2837:32;;;;;;;;;2357:610;-1:-1:-1;2916:1:2;;-1:-1:-1;2920:35:2;2357:610;2243:730;;;;;:::o;548:631::-;625:20;616:5;:29;;;;;;;;:::i;:::-;;612:561;;548:631;:::o;612:561::-;721:29;712:5;:38;;;;;;;;:::i;:::-;;708:465;;766:34;;;;;9846:2:12;766:34:2;;;9828:21:12;9885:2;9865:18;;;9858:30;9924:26;9904:18;;;9897:54;9968:18;;766:34:2;9644:348:12;708:465:2;830:35;821:5;:44;;;;;;;;:::i;:::-;;817:356;;881:41;;;;;10199:2:12;881:41:2;;;10181:21:12;10238:2;10218:18;;;10211:30;10277:33;10257:18;;;10250:61;10328:18;;881:41:2;9997:355:12;817:356:2;952:30;943:5;:39;;;;;;;;:::i;:::-;;939:234;;998:44;;;;;10559:2:12;998:44:2;;;10541:21:12;10598:2;10578:18;;;10571:30;10637:34;10617:18;;;10610:62;10708:4;10688:18;;;10681:32;10730:19;;998:44:2;10357:398:12;939:234:2;1072:30;1063:5;:39;;;;;;;;:::i;:::-;;1059:114;;1118:44;;;;;10962:2:12;1118:44:2;;;10944:21:12;11001:2;10981:18;;;10974:30;11040:34;11020:18;;;11013:62;11111:4;11091:18;;;11084:32;11133:19;;1118:44:2;10760:398:12;1059:114:2;548:631;:::o;7561:742:0:-;7707:12;7735:7;7731:566;;;-1:-1:-1;7765:10:0;7758:17;;7731:566;7876:17;;:21;7872:415;;8120:10;8114:17;8180:15;8167:10;8163:2;8159:19;8152:44;7872:415;8259:12;8252:20;;;;;;;;;;;:::i;5167:1603:2:-;5293:7;;6217:66;6204:79;;6200:161;;;-1:-1:-1;6315:1:2;;-1:-1:-1;6319:30:2;6299:51;;6200:161;6374:1;:7;;6379:2;6374:7;;:18;;;;;6385:1;:7;;6390:2;6385:7;;6374:18;6370:100;;;-1:-1:-1;6424:1:2;;-1:-1:-1;6428:30:2;6408:51;;6370:100;6581:24;;;6564:14;6581:24;;;;;;;;;11614:25:12;;;11687:4;11675:17;;11655:18;;;11648:45;;;;11709:18;;;11702:34;;;11752:18;;;11745:34;;;6581:24:2;;11586:19:12;;6581:24:2;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6581:24:2;;;;;;-1:-1:-1;;6619:20:2;;;6615:101;;6671:1;6675:29;6655:50;;;;;;;6615:101;6734:6;-1:-1:-1;6742:20:2;;-1:-1:-1;5167:1603:2;;;;;;;;:::o;196:347:12:-;247:8;257:6;311:3;304:4;296:6;292:17;288:27;278:55;;329:1;326;319:12;278:55;-1:-1:-1;352:20:12;;395:18;384:30;;381:50;;;427:1;424;417:12;381:50;464:4;456:6;452:17;440:29;;516:3;509:4;500:6;492;488:19;484:30;481:39;478:59;;;533:1;530;523:12;548:160;613:20;;669:13;;662:21;652:32;;642:60;;698:1;695;688:12;642:60;548:160;;;:::o;713:196::-;781:20;;841:42;830:54;;820:65;;810:93;;899:1;896;889:12;914:860;1019:6;1027;1035;1043;1051;1059;1112:3;1100:9;1091:7;1087:23;1083:33;1080:53;;;1129:1;1126;1119:12;1080:53;1169:9;1156:23;1198:18;1239:2;1231:6;1228:14;1225:34;;;1255:1;1252;1245:12;1225:34;1294:58;1344:7;1335:6;1324:9;1320:22;1294:58;:::i;:::-;1371:8;;-1:-1:-1;1268:84:12;-1:-1:-1;1268:84:12;;-1:-1:-1;1425:35:12;1456:2;1441:18;;1425:35;:::i;:::-;1415:45;;1479:38;1513:2;1502:9;1498:18;1479:38;:::i;:::-;1469:48;;1570:2;1559:9;1555:18;1542:32;1526:48;;1599:2;1589:8;1586:16;1583:36;;;1615:1;1612;1605:12;1583:36;;1654:60;1706:7;1695:8;1684:9;1680:24;1654:60;:::i;:::-;914:860;;;;-1:-1:-1;914:860:12;;-1:-1:-1;914:860:12;;1733:8;;914:860;-1:-1:-1;;;914:860:12:o;1779:186::-;1838:6;1891:2;1879:9;1870:7;1866:23;1862:32;1859:52;;;1907:1;1904;1897:12;1859:52;1930:29;1949:9;1930:29;:::i;2162:483::-;2241:6;2249;2257;2310:2;2298:9;2289:7;2285:23;2281:32;2278:52;;;2326:1;2323;2316:12;2278:52;2349:29;2368:9;2349:29;:::i;:::-;2339:39;;2429:2;2418:9;2414:18;2401:32;2456:18;2448:6;2445:30;2442:50;;;2488:1;2485;2478:12;2442:50;2527:58;2577:7;2568:6;2557:9;2553:22;2527:58;:::i;:::-;2162:483;;2604:8;;-1:-1:-1;2501:84:12;;-1:-1:-1;;;;2162:483:12:o;2650:260::-;2718:6;2726;2779:2;2767:9;2758:7;2754:23;2750:32;2747:52;;;2795:1;2792;2785:12;2747:52;2818:29;2837:9;2818:29;:::i;:::-;2808:39;;2866:38;2900:2;2889:9;2885:18;2866:38;:::i;:::-;2856:48;;2650:260;;;;;:::o;3097:620::-;3188:6;3196;3204;3212;3220;3273:3;3261:9;3252:7;3248:23;3244:33;3241:53;;;3290:1;3287;3280:12;3241:53;3313:29;3332:9;3313:29;:::i;:::-;3303:39;;3361:35;3392:2;3381:9;3377:18;3361:35;:::i;:::-;3351:45;;3447:2;3436:9;3432:18;3419:32;3474:18;3466:6;3463:30;3460:50;;;3506:1;3503;3496:12;3460:50;3545:58;3595:7;3586:6;3575:9;3571:22;3545:58;:::i;:::-;3622:8;;-1:-1:-1;3519:84:12;-1:-1:-1;3676:35:12;;-1:-1:-1;3707:2:12;3692:18;;3676:35;:::i;:::-;3666:45;;3097:620;;;;;;;;:::o;3722:395::-;3933:6;3925;3920:3;3907:33;4003:2;3999:15;;;;4016:66;3995:88;3959:16;;3984:100;;;4108:2;4100:11;;3722:395;-1:-1:-1;3722:395:12:o;4475:250::-;4560:1;4570:113;4584:6;4581:1;4578:13;4570:113;;;4660:11;;;4654:18;4641:11;;;4634:39;4606:2;4599:10;4570:113;;;-1:-1:-1;;4717:1:12;4699:16;;4692:27;4475:250::o;4730:329::-;4771:3;4809:5;4803:12;4836:6;4831:3;4824:19;4852:76;4921:6;4914:4;4909:3;4905:14;4898:4;4891:5;4887:16;4852:76;:::i;:::-;4973:2;4961:15;4978:66;4957:88;4948:98;;;;5048:4;4944:109;;4730:329;-1:-1:-1;;4730:329:12:o;5064:288::-;5239:6;5228:9;5221:25;5282:2;5277;5266:9;5262:18;5255:30;5202:4;5302:44;5342:2;5331:9;5327:18;5319:6;5302:44;:::i;5357:336::-;5426:6;5479:2;5467:9;5458:7;5454:23;5450:32;5447:52;;;5495:1;5492;5485:12;5447:52;5527:9;5521:16;5577:66;5570:5;5566:78;5559:5;5556:89;5546:117;;5659:1;5656;5649:12;6400:279;6465:9;;;6486:10;;;6483:190;;;6529:77;6526:1;6519:88;6630:4;6627:1;6620:15;6658:4;6655:1;6648:15;9163:287;9292:3;9330:6;9324:13;9346:66;9405:6;9400:3;9393:4;9385:6;9381:17;9346:66;:::i;:::-;9428:16;;;;;9163:287;-1:-1:-1;;9163:287:12:o;9455:184::-;9507:77;9504:1;9497:88;9604:4;9601:1;9594:15;9628:4;9625:1;9618:15;11163:219;11312:2;11301:9;11294:21;11275:4;11332:44;11372:2;11361:9;11357:18;11349:6;11332:44;:::i"
    },
    "gasEstimates": {
      "creation": {
        "codeDepositCost": "1054600",
        "executionCost": "infinite",
        "totalCost": "infinite"
      },
      "external": {
        "DOMAIN_SEPARATOR()": "infinite",
        "approveAndForward(bytes,bool,address,bytes)": "infinite",
        "approveForwarder(address,bool,bytes,bool)": "infinite",
        "checkApprovalAndForward(bytes,bool,address,bytes)": "infinite",
        "forward(address,bytes)": "infinite",
        "getNonce(address,address)": "infinite",
        "isApprovedForwarder(address,address)": "infinite",
        "isTrustedForwarder(address)": "394"
      },
      "internal": {
        "_DOMAIN_SEPARATOR()": "infinite",
        "_approveForwarder(address,address,bool,bytes memory,bool)": "infinite",
        "_calculateDomainSeparator(uint256)": "infinite",
        "_encodeMessage(address,address,bool,uint256)": "infinite",
        "_requireValidSignature(address,address,bool,uint256,bytes memory,bool)": "infinite"
      }
    },
    "methodIdentifiers": {
      "DOMAIN_SEPARATOR()": "3644e515",
      "approveAndForward(bytes,bool,address,bytes)": "9438f7f3",
      "approveForwarder(address,bool,bytes,bool)": "d9e07567",
      "checkApprovalAndForward(bytes,bool,address,bytes)": "3b7136e7",
      "forward(address,bytes)": "6fadcf72",
      "getNonce(address,address)": "d828435d",
      "isApprovedForwarder(address,address)": "8929a8ca",
      "isTrustedForwarder(address)": "572b6c05"
    }
  },
  "metadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ForwarderApproved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isEIP1271Signature\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"approveAndForward\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarderToChangeApproval\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isEIP1271Signature\",\"type\":\"bool\"}],\"name\":\"approveForwarder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isEIP1271Signature\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"checkApprovalAndForward\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"forward\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"isApprovedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Return the DOMAIN_SEPARATOR.\"},\"approveAndForward(bytes,bool,address,bytes)\":{\"params\":{\"data\":\"the content of the call (the signer address will be appended to it).\",\"isEIP1271Signature\":\"true if the signer is a contract that require authorization via EIP-1271\",\"signature\":\"signature by signer for approving forwarder.\",\"target\":\"destination of the call (that will receive the meta transaction).\"}},\"approveForwarder(address,bool,bytes,bool)\":{\"params\":{\"approved\":\"whether to approve or disapprove (if previously approved) the forwarder.\",\"forwarderToChangeApproval\":\"address of the forwarder to approve\",\"isEIP1271Signature\":\"true if the signer is a contract that require authorization via EIP-1271\",\"signature\":\"signature by signer for approving forwarder.\"}},\"checkApprovalAndForward(bytes,bool,address,bytes)\":{\"params\":{\"data\":\"the content of the call (the signer address will be appended to it).\",\"isEIP1271Signature\":\"true if the signer is a contract that require authorization via EIP-1271\",\"signature\":\"signature by signer for approving forwarder.\",\"target\":\"destination of the call (that will receive the meta transaction).\"}},\"forward(address,bytes)\":{\"params\":{\"data\":\"the content of the call (the signer address will be appended to it).\",\"target\":\"destination of the call (that will receive the meta transaction).\"}},\"getNonce(address,address)\":{\"params\":{\"forwarder\":\"meta transaction forwarder contract address.\",\"signer\":\"signer who authorize/dauthorize forwarders\"}},\"isApprovedForwarder(address,address)\":{\"params\":{\"forwarder\":\"meta transaction forwarder contract address.\",\"signer\":\"signer who authorized or not the forwarder.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"ForwarderApproved(address,address,bool,uint256)\":{\"notice\":\"emitted for each Forwarder Approval or Disaproval.\"}},\"kind\":\"user\",\"methods\":{\"approveAndForward(bytes,bool,address,bytes)\":{\"notice\":\"approve and forward the meta transaction in one call.\"},\"approveForwarder(address,bool,bytes,bool)\":{\"notice\":\"approve a forwarder using EIP-2771 (msg.sender is a forwarder and signer is encoded in the appended data).\"},\"checkApprovalAndForward(bytes,bool,address,bytes)\":{\"notice\":\"check approval (but do not record it) and forward the meta transaction in one call.\"},\"forward(address,bytes)\":{\"notice\":\"Forward the meta tx (assuming caller has been approved by the signer as forwarder).\"},\"getNonce(address,address)\":{\"notice\":\"return the current nonce for the signer/forwarder pair.\"},\"isApprovedForwarder(address,address)\":{\"notice\":\"return whether a forwarder is approved by a particular signer.\"},\"isTrustedForwarder(address)\":{\"notice\":\"The ForwarderRegistry supports every EIP-2771 compliant forwarder.\"}},\"notice\":\"Universal Meta Transaction Forwarder Registry. Users can record specific forwarder that will be allowed to forward meta transactions on their behalf.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/ForwarderRegistry.sol\":\"ForwarderRegistry\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"_lib/openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\"},\"_lib/openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _HEX_SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        // Inspired by OraclizeAPI's implementation - MIT licence\\n        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n        if (value == 0) {\\n            return \\\"0\\\";\\n        }\\n        uint256 temp = value;\\n        uint256 digits;\\n        while (temp != 0) {\\n            digits++;\\n            temp /= 10;\\n        }\\n        bytes memory buffer = new bytes(digits);\\n        while (value != 0) {\\n            digits -= 1;\\n            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\\n            value /= 10;\\n        }\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        if (value == 0) {\\n            return \\\"0x00\\\";\\n        }\\n        uint256 temp = value;\\n        uint256 length = 0;\\n        while (temp != 0) {\\n            length++;\\n            temp >>= 8;\\n        }\\n        return toHexString(value, length);\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _HEX_SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n}\\n\",\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\"},\"_lib/openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.3) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        } else if (error == RecoverError.InvalidSignatureV) {\\n            revert(\\\"ECDSA: invalid signature 'v' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n        if (v != 27 && v != 28) {\\n            return (address(0), RecoverError.InvalidSignatureV);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n    }\\n}\\n\",\"keccak256\":\"0xdb7f5c28fc61cda0bd8ab60ce288e206b791643bcd3ba464a70cbec18895a2f5\",\"license\":\"MIT\"},\"solc_0.8/ERC2771/IERC2771.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC2771 {\\n\\tfunction isTrustedForwarder(address forwarder) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x86f509ee4e3e3011e51c36c81badde85e2b3c26d0c4f2c2535a1e505d27b6981\",\"license\":\"MIT\"},\"solc_0.8/ERC2771/IForwarderRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IForwarderRegistry {\\n\\tfunction isApprovedForwarder(address, address) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x20a2ff137be641834fd5f412841dbaf8d34e49c32599b3992a7d304afa186a76\",\"license\":\"MIT\"},\"solc_0.8/ERC2771/UsingAppendedCallData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract UsingAppendedCallData {\\n\\tfunction _lastAppendedDataAsSender() internal pure virtual returns (address payable sender) {\\n\\t\\t// Copied from openzeppelin : https://github.com/OpenZeppelin/openzeppelin-contracts/blob/9d5f77db9da0604ce0b25148898a94ae2c20d70f/contracts/metatx/ERC2771Context.sol1\\n\\t\\t// The assembly code is more direct than the Solidity version using `abi.decode`.\\n\\t\\t// solhint-disable-next-line no-inline-assembly\\n\\t\\tassembly {\\n\\t\\t\\tsender := shr(96, calldataload(sub(calldatasize(), 20)))\\n\\t\\t}\\n\\t}\\n\\n\\tfunction _msgDataAssuming20BytesAppendedData() internal pure virtual returns (bytes calldata) {\\n\\t\\treturn msg.data[:msg.data.length - 20];\\n\\t}\\n}\\n\",\"keccak256\":\"0x153a7a9b87d95b7ae6a59de68da6c165bfccb53d99ef184668ecd973cd3c0e49\",\"license\":\"MIT\"},\"solc_0.8/ForwarderRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.16;\\n\\nimport \\\"../_lib/openzeppelin/contracts/utils/Address.sol\\\";\\nimport \\\"../_lib/openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"./ERC2771/IERC2771.sol\\\";\\nimport \\\"./ERC2771/UsingAppendedCallData.sol\\\";\\nimport \\\"./ERC2771/IForwarderRegistry.sol\\\";\\n\\ninterface ERC1271 {\\n\\tfunction isValidSignature(bytes32 hash, bytes calldata signature) external view returns (bytes4 magicValue);\\n}\\n\\n/// @notice Universal Meta Transaction Forwarder Registry.\\n/// Users can record specific forwarder that will be allowed to forward meta transactions on their behalf.\\ncontract ForwarderRegistry is IForwarderRegistry, UsingAppendedCallData, IERC2771 {\\n\\tusing Address for address;\\n\\tusing ECDSA for bytes32;\\n\\n\\tbytes4 internal constant ERC1271_MAGICVALUE = 0x1626ba7e;\\n\\n\\tbytes32 internal constant EIP712_DOMAIN_NAME = keccak256(\\\"ForwarderRegistry\\\");\\n\\tbytes32 internal constant APPROVAL_TYPEHASH =\\n\\t\\tkeccak256(\\\"ApproveForwarder(address signer,address forwarder,bool approved,uint256 nonce)\\\");\\n\\n\\tuint256 private immutable _deploymentChainId;\\n\\tbytes32 private immutable _deploymentDomainSeparator;\\n\\n\\tstruct Forwarder {\\n\\t\\tuint248 nonce;\\n\\t\\tbool approved;\\n\\t}\\n\\tmapping(address => mapping(address => Forwarder)) internal _forwarders;\\n\\n\\t/// @notice emitted for each Forwarder Approval or Disaproval.\\n\\tevent ForwarderApproved(address indexed signer, address indexed forwarder, bool approved, uint256 nonce);\\n\\n\\tconstructor() {\\n\\t\\tuint256 chainId;\\n\\t\\t//solhint-disable-next-line no-inline-assembly\\n\\t\\tassembly {\\n\\t\\t\\tchainId := chainid()\\n\\t\\t}\\n\\t\\t_deploymentChainId = chainId;\\n\\t\\t_deploymentDomainSeparator = _calculateDomainSeparator(chainId);\\n\\t}\\n\\n\\t/// @notice The ForwarderRegistry supports every EIP-2771 compliant forwarder.\\n\\tfunction isTrustedForwarder(address) external pure override returns (bool) {\\n\\t\\treturn true;\\n\\t}\\n\\n\\t/// @notice Forward the meta tx (assuming caller has been approved by the signer as forwarder).\\n\\t/// @param target destination of the call (that will receive the meta transaction).\\n\\t/// @param data the content of the call (the signer address will be appended to it).\\n\\tfunction forward(address target, bytes calldata data) external payable {\\n\\t\\taddress signer = _lastAppendedDataAsSender();\\n\\t\\trequire(_forwarders[signer][msg.sender].approved, \\\"NOT_AUTHORIZED_FORWARDER\\\");\\n\\t\\ttarget.functionCallWithValue(abi.encodePacked(data, signer), msg.value);\\n\\t}\\n\\n\\t/// @notice return the current nonce for the signer/forwarder pair.\\n\\t/// @param signer signer who authorize/dauthorize forwarders\\n\\t/// @param forwarder meta transaction forwarder contract address.\\n\\tfunction getNonce(address signer, address forwarder) external view returns (uint256) {\\n\\t\\treturn uint256(_forwarders[signer][forwarder].nonce);\\n\\t}\\n\\n\\t/// @notice return whether a forwarder is approved by a particular signer.\\n\\t/// @param signer signer who authorized or not the forwarder.\\n\\t/// @param forwarder meta transaction forwarder contract address.\\n\\tfunction isApprovedForwarder(address signer, address forwarder) external view override returns (bool) {\\n\\t\\treturn _forwarders[signer][forwarder].approved;\\n\\t}\\n\\n\\t/// @notice approve a forwarder using EIP-2771 (msg.sender is a forwarder and signer is encoded in the appended data).\\n\\t/// @param forwarderToChangeApproval address of the forwarder to approve\\n\\t/// @param approved whether to approve or disapprove (if previously approved) the forwarder.\\n\\t/// @param signature signature by signer for approving forwarder.\\n\\t/// @param isEIP1271Signature true if the signer is a contract that require authorization via EIP-1271\\n\\tfunction approveForwarder(\\n\\t\\taddress forwarderToChangeApproval,\\n\\t\\tbool approved,\\n\\t\\tbytes calldata signature,\\n\\t\\tbool isEIP1271Signature\\n\\t) external {\\n\\t\\t_approveForwarder(\\n\\t\\t\\t_lastAppendedDataAsSender(),\\n\\t\\t\\tforwarderToChangeApproval,\\n\\t\\t\\tapproved,\\n\\t\\t\\tsignature,\\n\\t\\t\\tisEIP1271Signature\\n\\t\\t);\\n\\t}\\n\\n\\t/// @notice approve and forward the meta transaction in one call.\\n\\t/// @param signature signature by signer for approving forwarder.\\n\\t/// @param isEIP1271Signature true if the signer is a contract that require authorization via EIP-1271\\n\\t/// @param target destination of the call (that will receive the meta transaction).\\n\\t/// @param data the content of the call (the signer address will be appended to it).\\n\\tfunction approveAndForward(\\n\\t\\tbytes calldata signature,\\n\\t\\tbool isEIP1271Signature,\\n\\t\\taddress target,\\n\\t\\tbytes calldata data\\n\\t) external payable {\\n\\t\\taddress signer = _lastAppendedDataAsSender();\\n\\t\\t_approveForwarder(signer, msg.sender, true, signature, isEIP1271Signature);\\n\\t\\ttarget.functionCallWithValue(abi.encodePacked(data, signer), msg.value);\\n\\t}\\n\\n\\t/// @notice check approval (but do not record it) and forward the meta transaction in one call.\\n\\t/// @param signature signature by signer for approving forwarder.\\n\\t/// @param isEIP1271Signature true if the signer is a contract that require authorization via EIP-1271\\n\\t/// @param target destination of the call (that will receive the meta transaction).\\n\\t/// @param data the content of the call (the signer address will be appended to it).\\n\\tfunction checkApprovalAndForward(\\n\\t\\tbytes calldata signature,\\n\\t\\tbool isEIP1271Signature,\\n\\t\\taddress target,\\n\\t\\tbytes calldata data\\n\\t) external payable {\\n\\t\\taddress signer = _lastAppendedDataAsSender();\\n\\t\\taddress forwarder = msg.sender;\\n\\t\\t_requireValidSignature(\\n\\t\\t\\tsigner,\\n\\t\\t\\tforwarder,\\n\\t\\t\\ttrue,\\n\\t\\t\\tuint256(_forwarders[signer][forwarder].nonce),\\n\\t\\t\\tsignature,\\n\\t\\t\\tisEIP1271Signature\\n\\t\\t);\\n\\t\\ttarget.functionCallWithValue(abi.encodePacked(data, signer), msg.value);\\n\\t}\\n\\n\\t/// @dev Return the DOMAIN_SEPARATOR.\\n\\tfunction DOMAIN_SEPARATOR() external view returns (bytes32) {\\n\\t\\treturn _DOMAIN_SEPARATOR();\\n\\t}\\n\\n\\t// -------------------------------------------------------- INTERNAL --------------------------------------------------------------------\\n\\n\\t/// @dev Return the DOMAIN_SEPARATOR.\\n\\tfunction _DOMAIN_SEPARATOR() internal view returns (bytes32) {\\n\\t\\tuint256 chainId;\\n\\t\\t//solhint-disable-next-line no-inline-assembly\\n\\t\\tassembly {\\n\\t\\t\\tchainId := chainid()\\n\\t\\t}\\n\\n\\t\\t// in case a fork happen, to support the chain that had to change its chainId, we compue the domain operator\\n\\t\\treturn chainId == _deploymentChainId ? _deploymentDomainSeparator : _calculateDomainSeparator(chainId);\\n\\t}\\n\\n\\t/// @dev Calculate the DOMAIN_SEPARATOR.\\n\\tfunction _calculateDomainSeparator(uint256 chainId) private view returns (bytes32) {\\n\\t\\treturn\\n\\t\\t\\tkeccak256(\\n\\t\\t\\t\\tabi.encode(\\n\\t\\t\\t\\t\\tkeccak256(\\\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\\\"),\\n\\t\\t\\t\\t\\tEIP712_DOMAIN_NAME,\\n\\t\\t\\t\\t\\tchainId,\\n\\t\\t\\t\\t\\taddress(this)\\n\\t\\t\\t\\t)\\n\\t\\t\\t);\\n\\t}\\n\\n\\tfunction _encodeMessage(\\n\\t\\taddress signer,\\n\\t\\taddress forwarder,\\n\\t\\tbool approved,\\n\\t\\tuint256 nonce\\n\\t) internal view returns (bytes memory) {\\n\\t\\treturn\\n\\t\\t\\tabi.encodePacked(\\n\\t\\t\\t\\t\\\"\\\\x19\\\\x01\\\",\\n\\t\\t\\t\\t_DOMAIN_SEPARATOR(),\\n\\t\\t\\t\\tkeccak256(abi.encode(APPROVAL_TYPEHASH, signer, forwarder, approved, nonce))\\n\\t\\t\\t);\\n\\t}\\n\\n\\tfunction _requireValidSignature(\\n\\t\\taddress signer,\\n\\t\\taddress forwarder,\\n\\t\\tbool approved,\\n\\t\\tuint256 nonce,\\n\\t\\tbytes memory signature,\\n\\t\\tbool isEIP1271Signature\\n\\t) internal view {\\n\\t\\tbytes memory dataToHash = _encodeMessage(signer, forwarder, approved, nonce);\\n\\t\\tif (isEIP1271Signature) {\\n\\t\\t\\trequire(\\n\\t\\t\\t\\tERC1271(signer).isValidSignature(keccak256(dataToHash), signature) == ERC1271_MAGICVALUE,\\n\\t\\t\\t\\t\\\"SIGNATURE_1271_INVALID\\\"\\n\\t\\t\\t);\\n\\t\\t} else {\\n\\t\\t\\taddress actualSigner = keccak256(dataToHash).recover(signature);\\n\\t\\t\\trequire(signer == actualSigner, \\\"SIGNATURE_WRONG_SIGNER\\\");\\n\\t\\t}\\n\\t}\\n\\n\\tfunction _approveForwarder(\\n\\t\\taddress signer,\\n\\t\\taddress forwarderToChangeApproval,\\n\\t\\tbool approved,\\n\\t\\tbytes memory signature,\\n\\t\\tbool isEIP1271Signature\\n\\t) internal {\\n\\t\\tForwarder storage forwarderData = _forwarders[signer][forwarderToChangeApproval];\\n\\t\\tuint256 nonce = uint256(forwarderData.nonce);\\n\\n\\t\\t_requireValidSignature(signer, forwarderToChangeApproval, approved, nonce, signature, isEIP1271Signature);\\n\\n\\t\\tforwarderData.approved = approved;\\n\\t\\tforwarderData.nonce = uint248(nonce + 1);\\n\\t\\temit ForwarderApproved(signer, forwarderToChangeApproval, approved, nonce);\\n\\t}\\n}\\n\",\"keccak256\":\"0xb618fb1f5405d7b589d5517ffdc48ee1b1867d943fde3ea2030050ae8c35d0d2\",\"license\":\"MIT\"}},\"version\":1}",
  "storageLayout": {
    "storage": [
      {
        "astId": 1236,
        "contract": "solc_0.8/ForwarderRegistry.sol:ForwarderRegistry",
        "label": "_forwarders",
        "offset": 0,
        "slot": "0",
        "type": "t_mapping(t_address,t_mapping(t_address,t_struct(Forwarder)1229_storage))"
      }
    ],
    "types": {
      "t_address": {
        "encoding": "inplace",
        "label": "address",
        "numberOfBytes": "20"
      },
      "t_bool": {
        "encoding": "inplace",
        "label": "bool",
        "numberOfBytes": "1"
      },
      "t_mapping(t_address,t_mapping(t_address,t_struct(Forwarder)1229_storage))": {
        "encoding": "mapping",
        "key": "t_address",
        "label": "mapping(address => mapping(address => struct ForwarderRegistry.Forwarder))",
        "numberOfBytes": "32",
        "value": "t_mapping(t_address,t_struct(Forwarder)1229_storage)"
      },
      "t_mapping(t_address,t_struct(Forwarder)1229_storage)": {
        "encoding": "mapping",
        "key": "t_address",
        "label": "mapping(address => struct ForwarderRegistry.Forwarder)",
        "numberOfBytes": "32",
        "value": "t_struct(Forwarder)1229_storage"
      },
      "t_struct(Forwarder)1229_storage": {
        "encoding": "inplace",
        "label": "struct ForwarderRegistry.Forwarder",
        "members": [
          {
            "astId": 1226,
            "contract": "solc_0.8/ForwarderRegistry.sol:ForwarderRegistry",
            "label": "nonce",
            "offset": 0,
            "slot": "0",
            "type": "t_uint248"
          },
          {
            "astId": 1228,
            "contract": "solc_0.8/ForwarderRegistry.sol:ForwarderRegistry",
            "label": "approved",
            "offset": 31,
            "slot": "0",
            "type": "t_bool"
          }
        ],
        "numberOfBytes": "32"
      },
      "t_uint248": {
        "encoding": "inplace",
        "label": "uint248",
        "numberOfBytes": "31"
      }
    }
  },
  "userdoc": {
    "events": {
      "ForwarderApproved(address,address,bool,uint256)": {
        "notice": "emitted for each Forwarder Approval or Disaproval."
      }
    },
    "kind": "user",
    "methods": {
      "approveAndForward(bytes,bool,address,bytes)": {
        "notice": "approve and forward the meta transaction in one call."
      },
      "approveForwarder(address,bool,bytes,bool)": {
        "notice": "approve a forwarder using EIP-2771 (msg.sender is a forwarder and signer is encoded in the appended data)."
      },
      "checkApprovalAndForward(bytes,bool,address,bytes)": {
        "notice": "check approval (but do not record it) and forward the meta transaction in one call."
      },
      "forward(address,bytes)": {
        "notice": "Forward the meta tx (assuming caller has been approved by the signer as forwarder)."
      },
      "getNonce(address,address)": {
        "notice": "return the current nonce for the signer/forwarder pair."
      },
      "isApprovedForwarder(address,address)": {
        "notice": "return whether a forwarder is approved by a particular signer."
      },
      "isTrustedForwarder(address)": {
        "notice": "The ForwarderRegistry supports every EIP-2771 compliant forwarder."
      }
    },
    "notice": "Universal Meta Transaction Forwarder Registry. Users can record specific forwarder that will be allowed to forward meta transactions on their behalf.",
    "version": 1
  }
}