{
    "contractName": "Forwarder",
    "abi": [
        {
            "inputs": [],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "domainSeparator",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "domainValue",
                    "type": "bytes"
                }
            ],
            "name": "DomainRegistered",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "typeHash",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "typeStr",
                    "type": "string"
                }
            ],
            "name": "RequestTypeRegistered",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "EIP712_DOMAIN_TYPE",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "GENERIC_PARAMS",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "name": "domains",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "name": "typeHashes",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "stateMutability": "payable",
            "type": "receive"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                }
            ],
            "name": "getNonce",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "from",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "to",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "value",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gas",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes",
                            "name": "data",
                            "type": "bytes"
                        },
                        {
                            "internalType": "uint256",
                            "name": "validUntilTime",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct IForwarder.ForwardRequest",
                    "name": "req",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes32",
                    "name": "domainSeparator",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes32",
                    "name": "requestTypeHash",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes",
                    "name": "suffixData",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "sig",
                    "type": "bytes"
                }
            ],
            "name": "verify",
            "outputs": [],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "from",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "to",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "value",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gas",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes",
                            "name": "data",
                            "type": "bytes"
                        },
                        {
                            "internalType": "uint256",
                            "name": "validUntilTime",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct IForwarder.ForwardRequest",
                    "name": "req",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes32",
                    "name": "domainSeparator",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes32",
                    "name": "requestTypeHash",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes",
                    "name": "suffixData",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "sig",
                    "type": "bytes"
                }
            ],
            "name": "execute",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "success",
                    "type": "bool"
                },
                {
                    "internalType": "bytes",
                    "name": "ret",
                    "type": "bytes"
                }
            ],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "typeName",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "typeSuffix",
                    "type": "string"
                }
            ],
            "name": "registerRequestType",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "name",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "version",
                    "type": "string"
                }
            ],
            "name": "registerDomainSeparator",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "from",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "to",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "value",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gas",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes",
                            "name": "data",
                            "type": "bytes"
                        },
                        {
                            "internalType": "uint256",
                            "name": "validUntilTime",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct IForwarder.ForwardRequest",
                    "name": "req",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes32",
                    "name": "requestTypeHash",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes",
                    "name": "suffixData",
                    "type": "bytes"
                }
            ],
            "name": "_getEncoded",
            "outputs": [
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"domainSeparator\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"domainValue\",\"type\":\"bytes\"}],\"name\":\"DomainRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"typeHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"typeStr\",\"type\":\"string\"}],\"name\":\"RequestTypeRegistered\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"EIP712_DOMAIN_TYPE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GENERIC_PARAMS\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"validUntilTime\",\"type\":\"uint256\"}],\"internalType\":\"struct IForwarder.ForwardRequest\",\"name\":\"req\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"requestTypeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"suffixData\",\"type\":\"bytes\"}],\"name\":\"_getEncoded\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"domains\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"validUntilTime\",\"type\":\"uint256\"}],\"internalType\":\"struct IForwarder.ForwardRequest\",\"name\":\"req\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"domainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"requestTypeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"suffixData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sig\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"ret\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"registerDomainSeparator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"typeName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"typeSuffix\",\"type\":\"string\"}],\"name\":\"registerRequestType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"typeHashes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"validUntilTime\",\"type\":\"uint256\"}],\"internalType\":\"struct IForwarder.ForwardRequest\",\"name\":\"req\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"domainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"requestTypeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"suffixData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sig\",\"type\":\"bytes\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"execute((address,address,uint256,uint256,uint256,bytes,uint256),bytes32,bytes32,bytes,bytes)\":{\"params\":{\"domainSeparator\":\"The domain used when signing this request.\",\"forwardRequest\":\"All requested transaction parameters.\",\"requestTypeHash\":\"The request type used when signing this request.\",\"signature\":\"The client signature to be validated.\",\"suffixData\":\"The ABI-encoded extension data for the current `RequestType` used when signing this request.\"},\"returns\":{\"ret\":\"The byte array returned by the underlying `CALL` to the target address.\",\"success\":\"The success flag of the underlying `CALL` to the target address.\"}},\"getNonce(address)\":{\"params\":{\"from\":\"The address of a sender.\"},\"returns\":{\"_0\":\"The nonce for this address.\"}},\"registerDomainSeparator(string,string)\":{\"params\":{\"name\":\"The domain's display name.\",\"version\":\"The domain/protocol version.\"}},\"registerRequestType(string,string)\":{\"params\":{\"typeName\":\"The name of the request type.\",\"typeSuffix\":\"Any extra data after the generic params. Must contain add at least one param. The generic ForwardRequest type is always registered by the constructor.\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"title\":\"The Forwarder Implementation\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"_getEncoded((address,address,uint256,uint256,uint256,bytes,uint256),bytes32,bytes)\":{\"notice\":\"Creates a byte array that is a valid ABI encoding of a request of a `RequestType` type. See `execute()`.\"},\"execute((address,address,uint256,uint256,uint256,bytes,uint256),bytes32,bytes32,bytes,bytes)\":{\"notice\":\"Executes a transaction specified by the `ForwardRequest`. The transaction is first verified and then executed. The success flag and returned bytes array of the `CALL` are returned as-is. This method would revert only in case of a verification error. All the target errors are reported using the returned success flag and returned bytes array.\"},\"registerDomainSeparator(string,string)\":{\"notice\":\"Register a new domain separator.This is necessary for the Forwarder to be able to verify the signatures conforming to the ERC-712.The domain separator must have the following fields: `name`, `version`, `chainId`, `verifyingContract`. The `chainId` is the current network's `chainId`, and the `verifyingContract` is this Forwarder's address. This method accepts the domain name and version to create and register the domain separator value.\"},\"registerRequestType(string,string)\":{\"notice\":\"Register a new Request typehash.This is necessary for the Forwarder to be able to verify the signatures conforming to the ERC-712.\"},\"verify((address,address,uint256,uint256,uint256,bytes,uint256),bytes32,bytes32,bytes,bytes)\":{\"notice\":\"Verify the transaction is valid and can be executed. Implementations must validate the signature and the nonce of the request are correct. Does not revert and returns successfully if the input is valid. Reverts if any validation has failed. For instance, if either signature or nonce are incorrect. Reverts if `domainSeparator` or `requestTypeHash` are not registered as well.\"}},\"notice\":\"This implementation of the `IForwarder` interface uses ERC-712 signatures and stored nonces for verification.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/alexf/gsn2/packages/contracts/solpp/forwarder/Forwarder.sol\":\"Forwarder\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/alexf/gsn2/packages/contracts/solpp/forwarder/Forwarder.sol\":{\"keccak256\":\"0x8b6f1891e4b2001eeb2f34c2a210312c5601e0605ebd2b1c23a68f71dcaeeb7a\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://ccbcb2342bde6e79f34b66dc1719af54ee9685b849da536bcc0b846fe03f3f0c\",\"dweb:/ipfs/QmNqkFNMAx6sFRPpzvWv5e7gohZLBsxFqMTqHgLEEaJCKg\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/forwarder/IForwarder.sol\":{\"keccak256\":\"0xef3d770001c3245db4408cdd0afdfc622695ccfe31f28b74571d05158bbf83f8\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://08949174ed05b596d89c8f1eeedfeb254993b84054bbc1ff6081ad926f5db406\",\"dweb:/ipfs/QmNQtKzHpie4Esocxuc9YrPtGQyA928a1a5TWbVc7cPoqk\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xd04b0f06e0666f29cf7cccc82894de541e19bb30a765b107b1e40bb7fe5f7d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b652499d098e88d8d878374616bb58434301061cae2253298b3f374044e0ddb\",\"dweb:/ipfs/QmbhAzctqo5jrSKU6idHdVyqfmzCcDbNUPvmx4GiXxfA6q\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xdb7f5c28fc61cda0bd8ab60ce288e206b791643bcd3ba464a70cbec18895a2f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf52bdf22a33263f5ca6227a35faeac3b81e7d2c692fbcc6a079d488710c5900\",\"dweb:/ipfs/QmcmsjkP4yq3UhiJbvyzwufaY2EKh1zhHaRK8ATag2cpD2\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"hardhat/console.sol\":{\"keccak256\":\"0x72b6a1d297cd3b033d7c2e4a7e7864934bb767db6453623f1c3082c6534547f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8cb8681076e765c214e0d51cac989325f6b98e315eaae06ee0cbd5a9f084763\",\"dweb:/ipfs/QmNWGHi4zmjxQTYN3NMGnJd49jBT5dE4bxTdWEaDuJrC6N\"]}},\"version\":1}",
    "bytecode": "0x60806040523480156200001157600080fd5b5060006040518060a00160405280606181526020016200162360619139604051602001620000409190620000c8565b60408051601f1981840301815291905290506200005d8162000064565b5062000174565b8051602080830191909120600081815291829052604091829020805460ff19166001179055905181907f64d6bce64323458c44643c51fe45113efc882082f7b7fd5f09f0d69d2eedb20290620000bc9085906200010c565b60405180910390a25050565b6e08cdee4eec2e4c8a4cae2eacae6e85608b1b815260008251620000f481600f85016020870162000141565b602960f81b600f939091019283015250601001919050565b60208152600082518060208401526200012d81604085016020870162000141565b601f01601f19169190910160400192915050565b60005b838110156200015e57818101518382015260200162000144565b838111156200016e576000848401525b50505050565b61149f80620001846000396000f3fe6080604052600436106100a05760003560e01c8063ad9f99c711610064578063ad9f99c714610199578063c3f28abd146101b9578063c722f177146101ce578063d9210be5146101fe578063e024dc7f1461021e578063e2b62f2d1461023f57600080fd5b806301ffc9a7146100ac578063066a310c146100e157806321fe98df146101035780632d0335ab146101335780639c7b45921461017757600080fd5b366100a757005b600080fd5b3480156100b857600080fd5b506100cc6100c7366004610f78565b61025f565b60405190151581526020015b60405180910390f35b3480156100ed57600080fd5b506100f6610296565b6040516100d89190611252565b34801561010f57600080fd5b506100cc61011e366004610f5f565b60006020819052908152604090205460ff1681565b34801561013f57600080fd5b5061016961014e366004610f2f565b6001600160a01b031660009081526002602052604090205490565b6040519081526020016100d8565b34801561018357600080fd5b50610197610192366004610fa2565b6102b2565b005b3480156101a557600080fd5b506101976101b436600461100e565b6103a9565b3480156101c557600080fd5b506100f66103ca565b3480156101da57600080fd5b506100cc6101e9366004610f5f565b60016020526000908152604090205460ff1681565b34801561020a57600080fd5b50610197610219366004610fa2565b6103e6565b61023161022c36600461100e565b6104e9565b6040516100d892919061122f565b34801561024b57600080fd5b506100f661025a3660046110b6565b610747565b60006001600160e01b031982166309788f9960e21b148061029057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6040518060a00160405280606181526020016113b76061913981565b60004690506000604051806080016040528060528152602001611418605291398051906020012086866040516102e992919061118b565b6040518091039020858560405161030192919061118b565b6040805191829003822060208301949094528101919091526060810191909152608081018390523060a082015260c00160408051601f198184030181528282528051602080830191909120600081815260019283905293909320805460ff1916909117905592509081907f4bc68689cbe89a4a6333a3ab0a70093874da3e5bfb71e93102027f3f073687d890610398908590611252565b60405180910390a250505050505050565b6103b2876107e1565b6103c18787878787878761085e565b50505050505050565b6040518060800160405280605281526020016114186052913981565b60005b83811015610494576000858583818110610405576104056113a0565b909101356001600160f81b031916915050600560fb1b81148015906104385750602960f81b6001600160f81b0319821614155b6104815760405162461bcd60e51b81526020600482015260156024820152744657443a20696e76616c696420747970656e616d6560581b60448201526064015b60405180910390fd5b508061048c81611359565b9150506103e9565b50600084846040518060a00160405280606181526020016113b76061913985856040516020016104c89594939291906111dd565b60405160208183030381529060405290506104e281610a30565b5050505050565b600060606104fc8989898989898961085e565b61050589610a92565b60c089013515806105195750428960c00135115b61055c5760405162461bcd60e51b81526020600482015260146024820152731195d10e881c995c5d595cdd08195e1c1a5c995960621b6044820152606401610478565b600060408a01351561056d5750619c405b600061057c60a08c018c611289565b61058960208e018e610f2f565b60405160200161059b9392919061119b565b60408051601f1981840301815291905290506105bb8260608d01356112d0565b60405a6105c990603f61130a565b6105d391906112e8565b10156106195760405162461bcd60e51b81526020600482015260156024820152744657443a20696e73756666696369656e742067617360581b6044820152606401610478565b61062960408c0160208d01610f2f565b6001600160a01b03168b606001358c604001358360405161064a91906111c1565b600060405180830381858888f193505050503d8060008114610688576040519150601f19603f3d011682016040523d82523d6000602084013e61068d565b606091505b506040805180820190915260208082527f6578656375746520726573756c743a20737563636573733a202573207265743a9082015291955093506106d19085610b16565b6106da83610b5f565b60408b0135158015906106ed5750600047115b15610739576106ff60208c018c610f2f565b6001600160a01b03166108fc479081150290604051600060405180830381858888f19350505050158015610737573d6000803e3d6000fd5b505b505097509795505050505050565b6060836107576020870187610f2f565b6001600160a01b03166107706040880160208901610f2f565b6001600160a01b03166040880135606089013560808a013561079560a08c018c611289565b6040516107a392919061118b565b6040519081900381206107c89796959493929160c08e0135908c908c90602001611139565b6040516020818303038152906040529050949350505050565b6080810135600260006107f76020850185610f2f565b6001600160a01b03166001600160a01b03168152602001908152602001600020541461085b5760405162461bcd60e51b815260206004820152601360248201527208cae887440dcdedcc6ca40dad2e6dac2e8c6d606b1b6044820152606401610478565b50565b60008681526001602052604090205460ff166108bc5760405162461bcd60e51b815260206004820152601d60248201527f4657443a20756e7265676973746572656420646f6d61696e207365702e0000006044820152606401610478565b60008581526020819052604090205460ff1661091a5760405162461bcd60e51b815260206004820152601a60248201527f4657443a20756e726567697374657265642074797065686173680000000000006044820152606401610478565b60008661092989888888610747565b805160209182012060405161095593920161190160f01b81526002810192909252602282015260420190565b60408051601f19818403018152919052805160209091012090503215806109da57506109846020890189610f2f565b6001600160a01b03166109cf84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508693925050610ba29050565b6001600160a01b0316145b610a265760405162461bcd60e51b815260206004820152601760248201527f4657443a207369676e6174757265206d69736d617463680000000000000000006044820152606401610478565b5050505050505050565b8051602080830191909120600081815291829052604091829020805460ff19166001179055905181907f64d6bce64323458c44643c51fe45113efc882082f7b7fd5f09f0d69d2eedb20290610a86908590611252565b60405180910390a25050565b608081013560026000610aa86020850185610f2f565b6001600160a01b0316815260208101919091526040016000908120805491610acf83611359565b919050551461085b5760405162461bcd60e51b815260206004820152601360248201527208cae887440dcdedcc6ca40dad2e6dac2e8c6d606b1b6044820152606401610478565b610b5b8282604051602401610b2c929190611265565b60408051601f198184030181529190526020810180516001600160e01b031663c3b5563560e01b179052610bc6565b5050565b61085b81604051602401610b739190611252565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b179052610bc6565b6000806000610bb18585610be7565b91509150610bbe81610c2d565b509392505050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b600080825160411415610c1e5760208301516040840151606085015160001a610c1287828585610de8565b94509450505050610c26565b506000905060025b9250929050565b6000816004811115610c4157610c4161138a565b1415610c4a5750565b6001816004811115610c5e57610c5e61138a565b1415610cac5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610478565b6002816004811115610cc057610cc061138a565b1415610d0e5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610478565b6003816004811115610d2257610d2261138a565b1415610d7b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610478565b6004816004811115610d8f57610d8f61138a565b141561085b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610478565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610e1f5750600090506003610ecc565b8460ff16601b14158015610e3757508460ff16601c14155b15610e485750600090506004610ecc565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610e9c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ec557600060019250925050610ecc565b9150600090505b94509492505050565b60008083601f840112610ee757600080fd5b50813567ffffffffffffffff811115610eff57600080fd5b602083019150836020828501011115610c2657600080fd5b600060e08284031215610f2957600080fd5b50919050565b600060208284031215610f4157600080fd5b81356001600160a01b0381168114610f5857600080fd5b9392505050565b600060208284031215610f7157600080fd5b5035919050565b600060208284031215610f8a57600080fd5b81356001600160e01b031981168114610f5857600080fd5b60008060008060408587031215610fb857600080fd5b843567ffffffffffffffff80821115610fd057600080fd5b610fdc88838901610ed5565b90965094506020870135915080821115610ff557600080fd5b5061100287828801610ed5565b95989497509550505050565b600080600080600080600060a0888a03121561102957600080fd5b873567ffffffffffffffff8082111561104157600080fd5b61104d8b838c01610f17565b985060208a0135975060408a0135965060608a013591508082111561107157600080fd5b61107d8b838c01610ed5565b909650945060808a013591508082111561109657600080fd5b506110a38a828b01610ed5565b989b979a50959850939692959293505050565b600080600080606085870312156110cc57600080fd5b843567ffffffffffffffff808211156110e457600080fd5b6110f088838901610f17565b9550602087013594506040870135915080821115610ff557600080fd5b60008151808452611125816020860160208601611329565b601f01601f19169290920160200192915050565b8a81528960208201528860408201528760608201528660808201528560a08201528460c08201528360e082015260006101008385828501376000929093019092019081529a9950505050505050505050565b8183823760009101908152919050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b600082516111d3818460208701611329565b9190910192915050565b84868237600085820160008152600560fb1b81528551611204816001840160208a01611329565b600b60fa1b600192909101918201528385600283013760009301600201928352509095945050505050565b821515815260406020820152600061124a604083018461110d565b949350505050565b602081526000610f58602083018461110d565b604081526000611278604083018561110d565b905082151560208301529392505050565b6000808335601e198436030181126112a057600080fd5b83018035915067ffffffffffffffff8211156112bb57600080fd5b602001915036819003821315610c2657600080fd5b600082198211156112e3576112e3611374565b500190565b60008261130557634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561132457611324611374565b500290565b60005b8381101561134457818101518382015260200161132c565b83811115611353576000848401525b50505050565b600060001982141561136d5761136d611374565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fdfe616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c627974657320646174612c75696e743235362076616c6964556e74696c54696d65454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429a2646970667358221220dea8bbf4c1060728b56ab506fd050e0be3bd6a44bcf0860d7eda22c8acf93a7864736f6c63430008070033616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c627974657320646174612c75696e743235362076616c6964556e74696c54696d65",
    "deployedBytecode": "0x6080604052600436106100a05760003560e01c8063ad9f99c711610064578063ad9f99c714610199578063c3f28abd146101b9578063c722f177146101ce578063d9210be5146101fe578063e024dc7f1461021e578063e2b62f2d1461023f57600080fd5b806301ffc9a7146100ac578063066a310c146100e157806321fe98df146101035780632d0335ab146101335780639c7b45921461017757600080fd5b366100a757005b600080fd5b3480156100b857600080fd5b506100cc6100c7366004610f78565b61025f565b60405190151581526020015b60405180910390f35b3480156100ed57600080fd5b506100f6610296565b6040516100d89190611252565b34801561010f57600080fd5b506100cc61011e366004610f5f565b60006020819052908152604090205460ff1681565b34801561013f57600080fd5b5061016961014e366004610f2f565b6001600160a01b031660009081526002602052604090205490565b6040519081526020016100d8565b34801561018357600080fd5b50610197610192366004610fa2565b6102b2565b005b3480156101a557600080fd5b506101976101b436600461100e565b6103a9565b3480156101c557600080fd5b506100f66103ca565b3480156101da57600080fd5b506100cc6101e9366004610f5f565b60016020526000908152604090205460ff1681565b34801561020a57600080fd5b50610197610219366004610fa2565b6103e6565b61023161022c36600461100e565b6104e9565b6040516100d892919061122f565b34801561024b57600080fd5b506100f661025a3660046110b6565b610747565b60006001600160e01b031982166309788f9960e21b148061029057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6040518060a00160405280606181526020016113b76061913981565b60004690506000604051806080016040528060528152602001611418605291398051906020012086866040516102e992919061118b565b6040518091039020858560405161030192919061118b565b6040805191829003822060208301949094528101919091526060810191909152608081018390523060a082015260c00160408051601f198184030181528282528051602080830191909120600081815260019283905293909320805460ff1916909117905592509081907f4bc68689cbe89a4a6333a3ab0a70093874da3e5bfb71e93102027f3f073687d890610398908590611252565b60405180910390a250505050505050565b6103b2876107e1565b6103c18787878787878761085e565b50505050505050565b6040518060800160405280605281526020016114186052913981565b60005b83811015610494576000858583818110610405576104056113a0565b909101356001600160f81b031916915050600560fb1b81148015906104385750602960f81b6001600160f81b0319821614155b6104815760405162461bcd60e51b81526020600482015260156024820152744657443a20696e76616c696420747970656e616d6560581b60448201526064015b60405180910390fd5b508061048c81611359565b9150506103e9565b50600084846040518060a00160405280606181526020016113b76061913985856040516020016104c89594939291906111dd565b60405160208183030381529060405290506104e281610a30565b5050505050565b600060606104fc8989898989898961085e565b61050589610a92565b60c089013515806105195750428960c00135115b61055c5760405162461bcd60e51b81526020600482015260146024820152731195d10e881c995c5d595cdd08195e1c1a5c995960621b6044820152606401610478565b600060408a01351561056d5750619c405b600061057c60a08c018c611289565b61058960208e018e610f2f565b60405160200161059b9392919061119b565b60408051601f1981840301815291905290506105bb8260608d01356112d0565b60405a6105c990603f61130a565b6105d391906112e8565b10156106195760405162461bcd60e51b81526020600482015260156024820152744657443a20696e73756666696369656e742067617360581b6044820152606401610478565b61062960408c0160208d01610f2f565b6001600160a01b03168b606001358c604001358360405161064a91906111c1565b600060405180830381858888f193505050503d8060008114610688576040519150601f19603f3d011682016040523d82523d6000602084013e61068d565b606091505b506040805180820190915260208082527f6578656375746520726573756c743a20737563636573733a202573207265743a9082015291955093506106d19085610b16565b6106da83610b5f565b60408b0135158015906106ed5750600047115b15610739576106ff60208c018c610f2f565b6001600160a01b03166108fc479081150290604051600060405180830381858888f19350505050158015610737573d6000803e3d6000fd5b505b505097509795505050505050565b6060836107576020870187610f2f565b6001600160a01b03166107706040880160208901610f2f565b6001600160a01b03166040880135606089013560808a013561079560a08c018c611289565b6040516107a392919061118b565b6040519081900381206107c89796959493929160c08e0135908c908c90602001611139565b6040516020818303038152906040529050949350505050565b6080810135600260006107f76020850185610f2f565b6001600160a01b03166001600160a01b03168152602001908152602001600020541461085b5760405162461bcd60e51b815260206004820152601360248201527208cae887440dcdedcc6ca40dad2e6dac2e8c6d606b1b6044820152606401610478565b50565b60008681526001602052604090205460ff166108bc5760405162461bcd60e51b815260206004820152601d60248201527f4657443a20756e7265676973746572656420646f6d61696e207365702e0000006044820152606401610478565b60008581526020819052604090205460ff1661091a5760405162461bcd60e51b815260206004820152601a60248201527f4657443a20756e726567697374657265642074797065686173680000000000006044820152606401610478565b60008661092989888888610747565b805160209182012060405161095593920161190160f01b81526002810192909252602282015260420190565b60408051601f19818403018152919052805160209091012090503215806109da57506109846020890189610f2f565b6001600160a01b03166109cf84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508693925050610ba29050565b6001600160a01b0316145b610a265760405162461bcd60e51b815260206004820152601760248201527f4657443a207369676e6174757265206d69736d617463680000000000000000006044820152606401610478565b5050505050505050565b8051602080830191909120600081815291829052604091829020805460ff19166001179055905181907f64d6bce64323458c44643c51fe45113efc882082f7b7fd5f09f0d69d2eedb20290610a86908590611252565b60405180910390a25050565b608081013560026000610aa86020850185610f2f565b6001600160a01b0316815260208101919091526040016000908120805491610acf83611359565b919050551461085b5760405162461bcd60e51b815260206004820152601360248201527208cae887440dcdedcc6ca40dad2e6dac2e8c6d606b1b6044820152606401610478565b610b5b8282604051602401610b2c929190611265565b60408051601f198184030181529190526020810180516001600160e01b031663c3b5563560e01b179052610bc6565b5050565b61085b81604051602401610b739190611252565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b179052610bc6565b6000806000610bb18585610be7565b91509150610bbe81610c2d565b509392505050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b600080825160411415610c1e5760208301516040840151606085015160001a610c1287828585610de8565b94509450505050610c26565b506000905060025b9250929050565b6000816004811115610c4157610c4161138a565b1415610c4a5750565b6001816004811115610c5e57610c5e61138a565b1415610cac5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610478565b6002816004811115610cc057610cc061138a565b1415610d0e5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610478565b6003816004811115610d2257610d2261138a565b1415610d7b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610478565b6004816004811115610d8f57610d8f61138a565b141561085b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610478565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610e1f5750600090506003610ecc565b8460ff16601b14158015610e3757508460ff16601c14155b15610e485750600090506004610ecc565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610e9c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ec557600060019250925050610ecc565b9150600090505b94509492505050565b60008083601f840112610ee757600080fd5b50813567ffffffffffffffff811115610eff57600080fd5b602083019150836020828501011115610c2657600080fd5b600060e08284031215610f2957600080fd5b50919050565b600060208284031215610f4157600080fd5b81356001600160a01b0381168114610f5857600080fd5b9392505050565b600060208284031215610f7157600080fd5b5035919050565b600060208284031215610f8a57600080fd5b81356001600160e01b031981168114610f5857600080fd5b60008060008060408587031215610fb857600080fd5b843567ffffffffffffffff80821115610fd057600080fd5b610fdc88838901610ed5565b90965094506020870135915080821115610ff557600080fd5b5061100287828801610ed5565b95989497509550505050565b600080600080600080600060a0888a03121561102957600080fd5b873567ffffffffffffffff8082111561104157600080fd5b61104d8b838c01610f17565b985060208a0135975060408a0135965060608a013591508082111561107157600080fd5b61107d8b838c01610ed5565b909650945060808a013591508082111561109657600080fd5b506110a38a828b01610ed5565b989b979a50959850939692959293505050565b600080600080606085870312156110cc57600080fd5b843567ffffffffffffffff808211156110e457600080fd5b6110f088838901610f17565b9550602087013594506040870135915080821115610ff557600080fd5b60008151808452611125816020860160208601611329565b601f01601f19169290920160200192915050565b8a81528960208201528860408201528760608201528660808201528560a08201528460c08201528360e082015260006101008385828501376000929093019092019081529a9950505050505050505050565b8183823760009101908152919050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b600082516111d3818460208701611329565b9190910192915050565b84868237600085820160008152600560fb1b81528551611204816001840160208a01611329565b600b60fa1b600192909101918201528385600283013760009301600201928352509095945050505050565b821515815260406020820152600061124a604083018461110d565b949350505050565b602081526000610f58602083018461110d565b604081526000611278604083018561110d565b905082151560208301529392505050565b6000808335601e198436030181126112a057600080fd5b83018035915067ffffffffffffffff8211156112bb57600080fd5b602001915036819003821315610c2657600080fd5b600082198211156112e3576112e3611374565b500190565b60008261130557634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561132457611324611374565b500290565b60005b8381101561134457818101518382015260200161132c565b83811115611353576000848401525b50505050565b600060001982141561136d5761136d611374565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fdfe616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c627974657320646174612c75696e743235362076616c6964556e74696c54696d65454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429a2646970667358221220dea8bbf4c1060728b56ab506fd050e0be3bd6a44bcf0860d7eda22c8acf93a7864736f6c63430008070033",
    "immutableReferences": {},
    "sourceMap": "479:6340:8:-:0;;;1365:173;;;;;;;;;;1389:25;1460:14;;;;;;;;;;;;;;;;;1424:56;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1424:56:8;;;;;;;;;;-1:-1:-1;1491:40:8;1424:56;1491:27;:40::i;:::-;1379:159;479:6340;;4951:256;5061:29;;;;;;;;;;5035:23;5100:27;;;;;;;;;;;;:34;;-1:-1:-1;;5100:34:8;5130:4;5100:34;;;5149:51;;5061:29;;5149:51;;;;5077:11;;5149:51;:::i;:::-;;;;;;;;5024:183;4951:256;:::o;14:589:63:-;-1:-1:-1;;;372:3:63;365:30;347:3;424:6;418:13;440:62;495:6;490:2;485:3;481:12;474:4;466:6;462:17;440:62;:::i;:::-;-1:-1:-1;;;561:2:63;521:16;;;;553:11;;;546:24;-1:-1:-1;594:2:63;586:11;;14:589;-1:-1:-1;14:589:63:o;608:383::-;757:2;746:9;739:21;720:4;789:6;783:13;832:6;827:2;816:9;812:18;805:34;848:66;907:6;902:2;891:9;887:18;882:2;874:6;870:15;848:66;:::i;:::-;975:2;954:15;-1:-1:-1;;950:29:63;935:45;;;;982:2;931:54;;608:383;-1:-1:-1;;608:383:63:o;996:258::-;1068:1;1078:113;1092:6;1089:1;1086:13;1078:113;;;1168:11;;;1162:18;1149:11;;;1142:39;1114:2;1107:10;1078:113;;;1209:6;1206:1;1203:13;1200:48;;;1244:1;1235:6;1230:3;1226:16;1219:27;1200:48;;996:258;;;:::o;:::-;479:6340:8;;;;;;",
    "deployedSourceMap": "479:6340:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1572:227;;;;;;;;;;-1:-1:-1;1572:227:8;;;;;:::i;:::-;;:::i;:::-;;;7375:14:63;;7368:22;7350:41;;7338:2;7323:18;1572:227:8;;;;;;;;648:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;929:42::-;;;;;;;;;;-1:-1:-1;929:42:8;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1244:115;;;;;;;;;;-1:-1:-1;1244:115:8;;;;;:::i;:::-;-1:-1:-1;;;;;1340:12:8;1314:7;1340:12;;;:6;:12;;;;;;;1244:115;;;;13480:25:63;;;13468:2;13453:18;1244:115:8;13334:177:63;4345:600:8;;;;;;;;;;-1:-1:-1;4345:600:8;;;;;:::i;:::-;;:::i;:::-;;1836:320;;;;;;;;;;-1:-1:-1;1836:320:8;;;;;:::i;:::-;;:::i;794:128::-;;;;;;;;;;;;;:::i;977:39::-;;;;;;;;;;-1:-1:-1;977:39:8;;;;;:::i;:::-;;;;;;;;;;;;;;;;3854:454;;;;;;;;;;-1:-1:-1;3854:454:8;;;;;:::i;:::-;;:::i;2193:1320::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;6088:729::-;;;;;;;;;;-1:-1:-1;6088:729:8;;;;;:::i;:::-;;:::i;1572:227::-;1674:4;-1:-1:-1;;;;;;1697:43:8;;-1:-1:-1;;;1697:43:8;;:95;;-1:-1:-1;;;;;;;;;;937:40:58;;;1756:36:8;1690:102;1572:227;-1:-1:-1;;1572:227:8:o;648:139::-;;;;;;;;;;;;;;;;;;;:::o;4345:600::-;4453:15;4559:9;4548:20;;4580:24;4647:18;;;;;;;;;;;;;;;;;4631:36;;;;;;4697:4;;4681:22;;;;;;;:::i;:::-;;;;;;;;4733:7;;4717:25;;;;;;;:::i;:::-;;;;;;;;;;4607:184;;;7964:25:63;;;;8005:18;;7998:34;;;;8048:18;;;8041:34;;;;8091:18;;;8084:34;;;4785:4:8;8134:19:63;;;8127:61;7936:19;;4607:184:8;;;-1:-1:-1;;4607:184:8;;;;;;;;;4823:22;;4607:184;4823:22;;;;;;;4802:18;4856:19;;;4878:4;4856:19;;;;;;;;:26;;-1:-1:-1;;4856:26:8;;;;;;4607:184;-1:-1:-1;4823:22:8;;;4897:41;;;;4607:184;;4897:41;:::i;:::-;;;;;;;;4443:502;;;4345:600;;;;:::o;1836:320::-;2056:17;2069:3;2056:12;:17::i;:::-;2083:66;2094:3;2099:15;2116;2133:10;;2145:3;;2083:10;:66::i;:::-;1836:320;;;;;;;:::o;794:128::-;;;;;;;;;;;;;;;;;;;:::o;3854:454::-;3971:9;3966:175;3986:26;;;3966:175;;;4033:8;4050;;4060:1;4044:18;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;4044:18:8;;-1:-1:-1;;;;;4084:8:8;;;;;:20;;-1:-1:-1;;;;;;;;;;4096:8:8;;;;4084:20;4076:54;;;;-1:-1:-1;;;4076:54:8;;12831:2:63;4076:54:8;;;12813:21:63;12870:2;12850:18;;;12843:30;-1:-1:-1;;;12889:18:63;;;12882:51;12950:18;;4076:54:8;;;;;;;;;-1:-1:-1;4014:3:8;;;;:::i;:::-;;;;3966:175;;;;4151:25;4203:8;;4218:14;;;;;;;;;;;;;;;;;4239:10;;4186:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4151:100;;4261:40;4289:11;4261:27;:40::i;:::-;3955:353;3854:454;;;;:::o;2193:1320::-;2429:12;2443:16;2471:66;2482:3;2487:15;2504;2521:10;;2533:3;;2471:10;:66::i;:::-;2547:26;2569:3;2547:21;:26::i;:::-;2592:18;;;;:23;;:63;;;2640:15;2619:3;:18;;;:36;2592:63;2584:96;;;;-1:-1:-1;;;2584:96:8;;12124:2:63;2584:96:8;;;12106:21:63;12163:2;12143:18;;;12136:30;-1:-1:-1;;;12182:18:63;;;12175:50;12242:18;;2584:96:8;11922:344:63;2584:96:8;2691:22;2732:9;;;;:14;2727:129;;-1:-1:-1;2780:5:8;2727:129;2865:21;2906:8;;;;:3;:8;:::i;:::-;2916;;;;:3;:8;:::i;:::-;2889:36;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2889:36:8;;;;;;;;;;-1:-1:-1;2962:24:8;2972:14;2962:7;;;;:24;:::i;:::-;2956:2;2943:9;:12;;2953:2;2943:12;:::i;:::-;:15;;;;:::i;:::-;:43;;2935:77;;;;-1:-1:-1;;;2935:77:8;;11774:2:63;2935:77:8;;;11756:21:63;11813:2;11793:18;;;11786:30;-1:-1:-1;;;11832:18:63;;;11825:51;11893:18;;2935:77:8;11572:345:63;2935:77:8;3097:6;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3097:11:8;3115:3;:7;;;3132:3;:9;;;3143:8;3097:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3163:56:8;;;;;;;;;;;;;;;;;;3081:71;;-1:-1:-1;3081:71:8;-1:-1:-1;3163:56:8;;3081:71;3163:11;:56::i;:::-;3229:21;3246:3;3229:16;:21::i;:::-;3266:9;;;;:14;;;;:41;;;3306:1;3284:21;:23;3266:41;3261:215;;;3424:8;;;;:3;:8;:::i;:::-;-1:-1:-1;;;;;3416:26:8;:49;3443:21;3416:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3261:215;3486:20;;2193:1320;;;;;;;;;;:::o;6088:729::-;6262:12;6551:15;6596:8;;;;:3;:8;:::i;:::-;-1:-1:-1;;;;;6580:26:8;6636:6;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6620:24:8;6658:9;;;;6681:7;;;;6702:9;;;;6735:8;;;;6658:3;6735:8;:::i;:::-;6725:19;;;;;;;:::i;:::-;;;;;;;;;6521:289;;;;;;;;6758:18;;;;;6790:10;;;;6521:289;;;:::i;:::-;;;;;;;;;;;;;6514:296;;6088:729;;;;;;:::o;3519:143::-;3622:9;;;;3602:6;:16;3609:8;;;;3622:3;3609:8;:::i;:::-;-1:-1:-1;;;;;3602:16:8;-1:-1:-1;;;;;3602:16:8;;;;;;;;;;;;;:29;3594:61;;;;-1:-1:-1;;;3594:61:8;;11426:2:63;3594:61:8;;;11408:21:63;11465:2;11445:18;;;11438:30;-1:-1:-1;;;11484:18:63;;;11477:49;11543:18;;3594:61:8;11224:343:63;3594:61:8;3519:143;:::o;5213:733::-;5456:24;;;;:7;:24;;;;;;;;5448:66;;;;-1:-1:-1;;;5448:66:8;;12473:2:63;5448:66:8;;;12455:21:63;12512:2;12492:18;;;12485:30;12551:31;12531:18;;;12524:59;12600:18;;5448:66:8;12271:353:63;5448:66:8;5532:10;:27;;;;;;;;;;;;;5524:66;;;;-1:-1:-1;;;5524:66:8;;13181:2:63;5524:66:8;;;13163:21:63;13220:2;13200:18;;;13193:30;13259:28;13239:18;;;13232:56;13305:18;;5524:66:8;12979:350:63;5524:66:8;5600:14;5673:15;5716:45;5728:3;5733:15;5750:10;;5716:11;:45::i;:::-;5706:56;;;;;;;5627:149;;;;;;-1:-1:-1;;;7071:27:63;;7123:1;7114:11;;7107:27;;;;7159:2;7150:12;;7143:28;7196:2;7187:12;;6813:392;5627:149:8;;;;-1:-1:-1;;5627:149:8;;;;;;;;;5617:160;;5627:149;5617:160;;;;;-1:-1:-1;5848:9:8;:28;;:63;;-1:-1:-1;5903:8:8;;;;:3;:8;:::i;:::-;-1:-1:-1;;;;;5880:31:8;:19;5895:3;;5880:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5880:6:8;;:19;-1:-1:-1;;5880:14:8;:19;-1:-1:-1;5880:19:8:i;:::-;-1:-1:-1;;;;;5880:31:8;;5848:63;5840:99;;;;-1:-1:-1;;;5840:99:8;;11074:2:63;5840:99:8;;;11056:21:63;11113:2;11093:18;;;11086:30;11152:25;11132:18;;;11125:53;11195:18;;5840:99:8;10872:347:63;5840:99:8;5438:508;5213:733;;;;;;;:::o;4951:256::-;5061:29;;;;;;;;;;5035:23;5100:27;;;;;;;;;;;;:34;;-1:-1:-1;;5100:34:8;5130:4;5100:34;;;5149:51;;5061:29;;5149:51;;;;5077:11;;5149:51;:::i;:::-;;;;;;;;5024:183;4951:256;:::o;3668:149::-;3777:9;;;;3755:6;:16;3762:8;;;;3777:3;3762:8;:::i;:::-;-1:-1:-1;;;;;3755:16:8;;;;;;;;;;;;-1:-1:-1;3755:16:8;;;:18;;;;;;:::i;:::-;;;;;:31;3747:63;;;;-1:-1:-1;;;3747:63:8;;11426:2:63;3747:63:8;;;11408:21:63;11465:2;11445:18;;;11438:30;-1:-1:-1;;;11484:18:63;;;11477:49;11543:18;;3747:63:8;11224:343:63;6165:130:62;6223:68;6283:2;6287;6239:51;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6239:51:62;;;;;;;;;;;;;;-1:-1:-1;;;;;6239:51:62;-1:-1:-1;;;6239:51:62;;;6223:15;:68::i;:::-;6165:130;;:::o;1115:115::-;1168:58;1222:2;1184:41;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1184:41:62;;;;;;;;;;;;;;-1:-1:-1;;;;;1184:41:62;-1:-1:-1;;;1184:41:62;;;1168:15;:58::i;3759:227:57:-;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:57;3759:227;-1:-1:-1;;;3759:227:57:o;176:288:62:-;264:14;;129:42;373:2;360:16;;240:21;;264:14;360:16;129:42;400:5;389:68;380:77;;335:126;;176:288;:::o;2243:730:57:-;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:57;;-1:-1:-1;2920:35:57;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;;-1:-1:-1;;;766:34:57;;9555:2:63;766:34:57;;;9537:21:63;9594:2;9574:18;;;9567:30;9633:26;9613:18;;;9606:54;9677:18;;766:34:57;9353:348:63;708:465:57;830:35;821:5;:44;;;;;;;;:::i;:::-;;817:356;;;881:41;;-1:-1:-1;;;881:41:57;;9908:2:63;881:41:57;;;9890:21:63;9947:2;9927:18;;;9920:30;9986:33;9966:18;;;9959:61;10037:18;;881:41:57;9706:355:63;817:356:57;952:30;943:5;:39;;;;;;;;:::i;:::-;;939:234;;;998:44;;-1:-1:-1;;;998:44:57;;10268:2:63;998:44:57;;;10250:21:63;10307:2;10287:18;;;10280:30;10346:34;10326:18;;;10319:62;-1:-1:-1;;;10397:18:63;;;10390:32;10439:19;;998:44:57;10066:398:63;939:234:57;1072:30;1063:5;:39;;;;;;;;:::i;:::-;;1059:114;;;1118:44;;-1:-1:-1;;;1118:44:57;;10671:2:63;1118:44:57;;;10653:21:63;10710:2;10690:18;;;10683:30;10749:34;10729:18;;;10722:62;-1:-1:-1;;;10800:18:63;;;10793:32;10842:19;;1118:44:57;10469:398:63;5167:1603:57;5293:7;;6217:66;6204:79;;6200:161;;;-1:-1:-1;6315:1:57;;-1:-1:-1;6319:30:57;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:57;;-1:-1:-1;6428:30:57;6408:51;;6370:100;6581:24;;;6564:14;6581:24;;;;;;;;;8426:25:63;;;8499:4;8487:17;;8467:18;;;8460:45;;;;8521:18;;;8514:34;;;8564:18;;;8557:34;;;6581:24:57;;8398:19:63;;6581:24:57;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6581:24:57;;-1:-1:-1;;6581:24:57;;;-1:-1:-1;;;;;;;6619:20:57;;6615:101;;6671:1;6675:29;6655:50;;;;;;;6615:101;6734:6;-1:-1:-1;6742:20:57;;-1:-1:-1;5167:1603:57;;;;;;;;:::o;14:347:63:-;65:8;75:6;129:3;122:4;114:6;110:17;106:27;96:55;;147:1;144;137:12;96:55;-1:-1:-1;170:20:63;;213:18;202:30;;199:50;;;245:1;242;235:12;199:50;282:4;274:6;270:17;258:29;;334:3;327:4;318:6;310;306:19;302:30;299:39;296:59;;;351:1;348;341:12;366:163;433:5;478:3;469:6;464:3;460:16;456:26;453:46;;;495:1;492;485:12;453:46;-1:-1:-1;517:6:63;366:163;-1:-1:-1;366:163:63:o;534:286::-;593:6;646:2;634:9;625:7;621:23;617:32;614:52;;;662:1;659;652:12;614:52;688:23;;-1:-1:-1;;;;;740:31:63;;730:42;;720:70;;786:1;783;776:12;720:70;809:5;534:286;-1:-1:-1;;;534:286:63:o;825:180::-;884:6;937:2;925:9;916:7;912:23;908:32;905:52;;;953:1;950;943:12;905:52;-1:-1:-1;976:23:63;;825:180;-1:-1:-1;825:180:63:o;1010:286::-;1068:6;1121:2;1109:9;1100:7;1096:23;1092:32;1089:52;;;1137:1;1134;1127:12;1089:52;1163:23;;-1:-1:-1;;;;;;1215:32:63;;1205:43;;1195:71;;1262:1;1259;1252:12;1301:719;1393:6;1401;1409;1417;1470:2;1458:9;1449:7;1445:23;1441:32;1438:52;;;1486:1;1483;1476:12;1438:52;1526:9;1513:23;1555:18;1596:2;1588:6;1585:14;1582:34;;;1612:1;1609;1602:12;1582:34;1651:58;1701:7;1692:6;1681:9;1677:22;1651:58;:::i;:::-;1728:8;;-1:-1:-1;1625:84:63;-1:-1:-1;1816:2:63;1801:18;;1788:32;;-1:-1:-1;1832:16:63;;;1829:36;;;1861:1;1858;1851:12;1829:36;;1900:60;1952:7;1941:8;1930:9;1926:24;1900:60;:::i;:::-;1301:719;;;;-1:-1:-1;1979:8:63;-1:-1:-1;;;;1301:719:63:o;2025:1103::-;2176:6;2184;2192;2200;2208;2216;2224;2277:3;2265:9;2256:7;2252:23;2248:33;2245:53;;;2294:1;2291;2284:12;2245:53;2334:9;2321:23;2363:18;2404:2;2396:6;2393:14;2390:34;;;2420:1;2417;2410:12;2390:34;2443:74;2509:7;2500:6;2489:9;2485:22;2443:74;:::i;:::-;2433:84;;2564:2;2553:9;2549:18;2536:32;2526:42;;2615:2;2604:9;2600:18;2587:32;2577:42;;2672:2;2661:9;2657:18;2644:32;2628:48;;2701:2;2691:8;2688:16;2685:36;;;2717:1;2714;2707:12;2685:36;2756:60;2808:7;2797:8;2786:9;2782:24;2756:60;:::i;:::-;2835:8;;-1:-1:-1;2730:86:63;-1:-1:-1;2923:3:63;2908:19;;2895:33;;-1:-1:-1;2940:16:63;;;2937:36;;;2969:1;2966;2959:12;2937:36;;3008:60;3060:7;3049:8;3038:9;3034:24;3008:60;:::i;:::-;2025:1103;;;;-1:-1:-1;2025:1103:63;;-1:-1:-1;2025:1103:63;;;;2982:86;;-1:-1:-1;;;2025:1103:63:o;3133:746::-;3255:6;3263;3271;3279;3332:2;3320:9;3311:7;3307:23;3303:32;3300:52;;;3348:1;3345;3338:12;3300:52;3388:9;3375:23;3417:18;3458:2;3450:6;3447:14;3444:34;;;3474:1;3471;3464:12;3444:34;3497:74;3563:7;3554:6;3543:9;3539:22;3497:74;:::i;:::-;3487:84;;3618:2;3607:9;3603:18;3590:32;3580:42;;3675:2;3664:9;3660:18;3647:32;3631:48;;3704:2;3694:8;3691:16;3688:36;;;3720:1;3717;3710:12;3884:257;3925:3;3963:5;3957:12;3990:6;3985:3;3978:19;4006:63;4062:6;4055:4;4050:3;4046:14;4039:4;4032:5;4028:16;4006:63;:::i;:::-;4123:2;4102:15;-1:-1:-1;;4098:29:63;4089:39;;;;4130:4;4085:50;;3884:257;-1:-1:-1;;3884:257:63:o;4146:826::-;4539:6;4534:3;4527:19;4576:6;4571:2;4566:3;4562:12;4555:28;4613:6;4608:2;4603:3;4599:12;4592:28;4650:6;4645:2;4640:3;4636:12;4629:28;4688:6;4682:3;4677;4673:13;4666:29;4726:6;4720:3;4715;4711:13;4704:29;4764:6;4758:3;4753;4749:13;4742:29;4802:6;4796:3;4791;4787:13;4780:29;4509:3;4828;4875:6;4867;4862:2;4857:3;4853:12;4840:42;4946:1;4905:16;;;;4901:25;;;4935:13;;;4901:25;4146:826;-1:-1:-1;;;;;;;;;;4146:826:63:o;4977:271::-;5160:6;5152;5147:3;5134:33;5116:3;5186:16;;5211:13;;;5186:16;4977:271;-1:-1:-1;4977:271:63:o;5253:382::-;5464:6;5456;5451:3;5438:33;5556:2;5552:15;;;;-1:-1:-1;;5548:53:63;5490:16;;5537:65;;;5626:2;5618:11;;5253:382;-1:-1:-1;5253:382:63:o;5640:274::-;5769:3;5807:6;5801:13;5823:53;5869:6;5864:3;5857:4;5849:6;5845:17;5823:53;:::i;:::-;5892:16;;;;;5640:274;-1:-1:-1;;5640:274:63:o;5919:889::-;6412:6;6404;6399:3;6386:33;6368:3;6447:6;6442:3;6438:16;6474:1;6470:2;6463:13;-1:-1:-1;;;6492:2:63;6485:15;6529:6;6523:13;6545:60;6598:6;6594:1;6590:2;6586:10;6579:4;6571:6;6567:17;6545:60;:::i;:::-;-1:-1:-1;;;6663:1:63;6624:15;;;;6655:10;;;6648:23;6713:6;6705;6701:1;6693:10;;6680:40;6782:1;6743:15;;6760:1;6739:23;6771:13;;;-1:-1:-1;6739:23:63;;5919:889;-1:-1:-1;;;;;5919:889:63:o;7402:298::-;7585:6;7578:14;7571:22;7560:9;7553:41;7630:2;7625;7614:9;7610:18;7603:30;7534:4;7650:44;7690:2;7679:9;7675:18;7667:6;7650:44;:::i;:::-;7642:52;7402:298;-1:-1:-1;;;;7402:298:63:o;8602:217::-;8749:2;8738:9;8731:21;8712:4;8769:44;8809:2;8798:9;8794:18;8786:6;8769:44;:::i;9048:300::-;9219:2;9208:9;9201:21;9182:4;9239:44;9279:2;9268:9;9264:18;9256:6;9239:44;:::i;:::-;9231:52;;9333:6;9326:14;9319:22;9314:2;9303:9;9299:18;9292:50;9048:300;;;;;:::o;13516:521::-;13593:4;13599:6;13659:11;13646:25;13753:2;13749:7;13738:8;13722:14;13718:29;13714:43;13694:18;13690:68;13680:96;;13772:1;13769;13762:12;13680:96;13799:33;;13851:20;;;-1:-1:-1;13894:18:63;13883:30;;13880:50;;;13926:1;13923;13916:12;13880:50;13959:4;13947:17;;-1:-1:-1;13990:14:63;13986:27;;;13976:38;;13973:58;;;14027:1;14024;14017:12;14042:128;14082:3;14113:1;14109:6;14106:1;14103:13;14100:39;;;14119:18;;:::i;:::-;-1:-1:-1;14155:9:63;;14042:128::o;14175:217::-;14215:1;14241;14231:132;;14285:10;14280:3;14276:20;14273:1;14266:31;14320:4;14317:1;14310:15;14348:4;14345:1;14338:15;14231:132;-1:-1:-1;14377:9:63;;14175:217::o;14397:168::-;14437:7;14503:1;14499;14495:6;14491:14;14488:1;14485:21;14480:1;14473:9;14466:17;14462:45;14459:71;;;14510:18;;:::i;:::-;-1:-1:-1;14550:9:63;;14397:168::o;14570:258::-;14642:1;14652:113;14666:6;14663:1;14660:13;14652:113;;;14742:11;;;14736:18;14723:11;;;14716:39;14688:2;14681:10;14652:113;;;14783:6;14780:1;14777:13;14774:48;;;14818:1;14809:6;14804:3;14800:16;14793:27;14774:48;;14570:258;;;:::o;14833:135::-;14872:3;-1:-1:-1;;14893:17:63;;14890:43;;;14913:18;;:::i;:::-;-1:-1:-1;14960:1:63;14949:13;;14833:135::o;14973:127::-;15034:10;15029:3;15025:20;15022:1;15015:31;15065:4;15062:1;15055:15;15089:4;15086:1;15079:15;15105:127;15166:10;15161:3;15157:20;15154:1;15147:31;15197:4;15194:1;15187:15;15221:4;15218:1;15211:15;15237:127;15298:10;15293:3;15289:20;15286:1;15279:31;15329:4;15326:1;15319:15;15353:4;15350:1;15343:15",
    "source": "pragma solidity ^0.8.0;\npragma abicoder v2;\n\n// solhint-disable not-rely-on-time\n// SPDX-License-Identifier: GPL-3.0-only\n\nimport \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\n\nimport \"hardhat/console.sol\";\n\nimport \"./IForwarder.sol\";\n\n/**\n * @title The Forwarder Implementation\n * @notice This implementation of the `IForwarder` interface uses ERC-712 signatures and stored nonces for verification.\n */\ncontract Forwarder is IForwarder, ERC165 {\n    using ECDSA for bytes32;\n\n    address private constant DRY_RUN_ADDRESS = 0x0000000000000000000000000000000000000000;\n\n    string public constant GENERIC_PARAMS = \"address from,address to,uint256 value,uint256 gas,uint256 nonce,bytes data,uint256 validUntilTime\";\n\n    string public constant EIP712_DOMAIN_TYPE = \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\";\n\n    mapping(bytes32 => bool) public typeHashes;\n    mapping(bytes32 => bool) public domains;\n\n    // Nonces of senders, used to prevent replay attacks\n    mapping(address => uint256) private nonces;\n\n    // solhint-disable-next-line no-empty-blocks\n    receive() external payable {}\n\n    /// @inheritdoc IForwarder\n    function getNonce(address from)\n    public view override\n    returns (uint256) {\n        return nonces[from];\n    }\n\n    constructor() {\n        string memory requestType = string(abi.encodePacked(\"ForwardRequest(\", GENERIC_PARAMS, \")\"));\n        registerRequestTypeInternal(requestType);\n    }\n\n    /// @inheritdoc IERC165\n    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) {\n        return interfaceId == type(IForwarder).interfaceId ||\n            super.supportsInterface(interfaceId);\n    }\n\n    /// @inheritdoc IForwarder\n    function verify(\n        ForwardRequest calldata req,\n        bytes32 domainSeparator,\n        bytes32 requestTypeHash,\n        bytes calldata suffixData,\n        bytes calldata sig)\n    external override view {\n        _verifyNonce(req);\n        _verifySig(req, domainSeparator, requestTypeHash, suffixData, sig);\n    }\n\n    /// @inheritdoc IForwarder\n    function execute(\n        ForwardRequest calldata req,\n        bytes32 domainSeparator,\n        bytes32 requestTypeHash,\n        bytes calldata suffixData,\n        bytes calldata sig\n    )\n    external payable\n    override\n    returns (bool success, bytes memory ret) {\n        _verifySig(req, domainSeparator, requestTypeHash, suffixData, sig);\n        _verifyAndUpdateNonce(req);\n\n        require(req.validUntilTime == 0 || req.validUntilTime > block.timestamp, \"FWD: request expired\");\n\n        uint256 gasForTransfer = 0;\n        if ( req.value != 0 ) {\n            gasForTransfer = 40000; //buffer in case we need to move eth after the transaction.\n        }\n        bytes memory callData = abi.encodePacked(req.data, req.from);\n        require(gasleft()*63/64 >= req.gas + gasForTransfer, \"FWD: insufficient gas\");\n        // solhint-disable-next-line avoid-low-level-calls\n        (success,ret) = req.to.call{gas : req.gas, value : req.value}(callData);\n\n        console.log(\"execute result: success: %s ret:\", success);\n        console.logBytes(ret);\n\n        if ( req.value != 0 && address(this).balance>0 ) {\n            // can't fail: req.from signed (off-chain) the request, so it must be an EOA...\n            payable(req.from).transfer(address(this).balance);\n        }\n\n        return (success,ret);\n    }\n\n    function _verifyNonce(ForwardRequest calldata req) internal view {\n        require(nonces[req.from] == req.nonce, \"FWD: nonce mismatch\");\n    }\n\n    function _verifyAndUpdateNonce(ForwardRequest calldata req) internal {\n        require(nonces[req.from]++ == req.nonce, \"FWD: nonce mismatch\");\n    }\n\n    /// @inheritdoc IForwarder\n    function registerRequestType(string calldata typeName, string calldata typeSuffix) external override {\n\n        for (uint256 i = 0; i < bytes(typeName).length; i++) {\n            bytes1 c = bytes(typeName)[i];\n            require(c != \"(\" && c != \")\", \"FWD: invalid typename\");\n        }\n\n        string memory requestType = string(abi.encodePacked(typeName, \"(\", GENERIC_PARAMS, \",\", typeSuffix));\n        registerRequestTypeInternal(requestType);\n    }\n\n    /// @inheritdoc IForwarder\n    function registerDomainSeparator(string calldata name, string calldata version) external override {\n        uint256 chainId;\n        /* solhint-disable-next-line no-inline-assembly */\n        assembly { chainId := chainid() }\n\n        bytes memory domainValue = abi.encode(\n            keccak256(bytes(EIP712_DOMAIN_TYPE)),\n            keccak256(bytes(name)),\n            keccak256(bytes(version)),\n            chainId,\n            address(this));\n\n        bytes32 domainHash = keccak256(domainValue);\n\n        domains[domainHash] = true;\n        emit DomainRegistered(domainHash, domainValue);\n    }\n\n    function registerRequestTypeInternal(string memory requestType) internal {\n\n        bytes32 requestTypehash = keccak256(bytes(requestType));\n        typeHashes[requestTypehash] = true;\n        emit RequestTypeRegistered(requestTypehash, requestType);\n    }\n\n    function _verifySig(\n        ForwardRequest calldata req,\n        bytes32 domainSeparator,\n        bytes32 requestTypeHash,\n        bytes calldata suffixData,\n        bytes calldata sig)\n    internal\n    virtual\n    view\n    {\n        require(domains[domainSeparator], \"FWD: unregistered domain sep.\");\n        require(typeHashes[requestTypeHash], \"FWD: unregistered typehash\");\n        bytes32 digest = keccak256(abi.encodePacked(\n                \"\\x19\\x01\", domainSeparator,\n                keccak256(_getEncoded(req, requestTypeHash, suffixData))\n            ));\n        // solhint-disable-next-line avoid-tx-origin\n        require(tx.origin == DRY_RUN_ADDRESS || digest.recover(sig) == req.from, \"FWD: signature mismatch\");\n    }\n\n    /**\n     * @notice Creates a byte array that is a valid ABI encoding of a request of a `RequestType` type. See `execute()`.\n     */\n    function _getEncoded(\n        ForwardRequest calldata req,\n        bytes32 requestTypeHash,\n        bytes calldata suffixData\n    )\n    public\n    pure\n    returns (\n        bytes memory\n    ) {\n        // we use encodePacked since we append suffixData as-is, not as dynamic param.\n        // still, we must make sure all first params are encoded as abi.encode()\n        // would encode them - as 256-bit-wide params.\n        return abi.encodePacked(\n            requestTypeHash,\n            uint256(uint160(req.from)),\n            uint256(uint160(req.to)),\n            req.value,\n            req.gas,\n            req.nonce,\n            keccak256(req.data),\n            req.validUntilTime,\n            suffixData\n        );\n    }\n}",
    "sourcePath": "/Users/alexf/gsn2/packages/contracts/solpp/forwarder/Forwarder.sol",
    "ast": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/forwarder/Forwarder.sol",
        "exportedSymbols": {
            "ECDSA": [
                12122
            ],
            "ERC165": [
                12146
            ],
            "Forwarder": [
                5036
            ],
            "IERC165": [
                12352
            ],
            "IForwarder": [
                5129
            ],
            "Strings": [
                11734
            ],
            "console": [
                20920
            ]
        },
        "id": 5037,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 4468,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:8"
            },
            {
                "id": 4469,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "24:19:8"
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
                "file": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
                "id": 4470,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 5037,
                "sourceUnit": 12123,
                "src": "123:62:8",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
                "file": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
                "id": 4471,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 5037,
                "sourceUnit": 12147,
                "src": "186:64:8",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "hardhat/console.sol",
                "file": "hardhat/console.sol",
                "id": 4472,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 5037,
                "sourceUnit": 20921,
                "src": "252:29:8",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/forwarder/IForwarder.sol",
                "file": "./IForwarder.sol",
                "id": 4473,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 5037,
                "sourceUnit": 5130,
                "src": "283:26:8",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 4475,
                            "name": "IForwarder",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 5129,
                            "src": "501:10:8"
                        },
                        "id": 4476,
                        "nodeType": "InheritanceSpecifier",
                        "src": "501:10:8"
                    },
                    {
                        "baseName": {
                            "id": 4477,
                            "name": "ERC165",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12146,
                            "src": "513:6:8"
                        },
                        "id": 4478,
                        "nodeType": "InheritanceSpecifier",
                        "src": "513:6:8"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "documentation": {
                    "id": 4474,
                    "nodeType": "StructuredDocumentation",
                    "src": "311:167:8",
                    "text": " @title The Forwarder Implementation\n @notice This implementation of the `IForwarder` interface uses ERC-712 signatures and stored nonces for verification."
                },
                "fullyImplemented": true,
                "id": 5036,
                "linearizedBaseContracts": [
                    5036,
                    12146,
                    5129,
                    12352
                ],
                "name": "Forwarder",
                "nameLocation": "488:9:8",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 4481,
                        "libraryName": {
                            "id": 4479,
                            "name": "ECDSA",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12122,
                            "src": "532:5:8"
                        },
                        "nodeType": "UsingForDirective",
                        "src": "526:24:8",
                        "typeName": {
                            "id": 4480,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "542:7:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                            }
                        }
                    },
                    {
                        "constant": true,
                        "id": 4484,
                        "mutability": "constant",
                        "name": "DRY_RUN_ADDRESS",
                        "nameLocation": "581:15:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 5036,
                        "src": "556:85:8",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                        },
                        "typeName": {
                            "id": 4482,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "556:7:8",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        },
                        "value": {
                            "hexValue": "307830303030303030303030303030303030303030303030303030303030303030303030303030303030",
                            "id": 4483,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "599:42:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            },
                            "value": "0x0000000000000000000000000000000000000000"
                        },
                        "visibility": "private"
                    },
                    {
                        "constant": true,
                        "functionSelector": "066a310c",
                        "id": 4487,
                        "mutability": "constant",
                        "name": "GENERIC_PARAMS",
                        "nameLocation": "671:14:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 5036,
                        "src": "648:139:8",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 4485,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "648:6:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "value": {
                            "hexValue": "616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c627974657320646174612c75696e743235362076616c6964556e74696c54696d65",
                            "id": 4486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "688:99:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_33f12fe95872be7be9c474c0e99a56a1b0cad386a14d26df2bb11622e5368f9b",
                                "typeString": "literal_string \"address from,address to,uint256 value,uint256 gas,uint256 nonce,bytes data,uint256 validUntilTime\""
                            },
                            "value": "address from,address to,uint256 value,uint256 gas,uint256 nonce,bytes data,uint256 validUntilTime"
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": true,
                        "functionSelector": "c3f28abd",
                        "id": 4490,
                        "mutability": "constant",
                        "name": "EIP712_DOMAIN_TYPE",
                        "nameLocation": "817:18:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 5036,
                        "src": "794:128:8",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 4488,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "794:6:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "value": {
                            "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429",
                            "id": 4489,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "838:84:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f",
                                "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""
                            },
                            "value": "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "21fe98df",
                        "id": 4494,
                        "mutability": "mutable",
                        "name": "typeHashes",
                        "nameLocation": "961:10:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 5036,
                        "src": "929:42:8",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                            "typeString": "mapping(bytes32 => bool)"
                        },
                        "typeName": {
                            "id": 4493,
                            "keyType": {
                                "id": 4491,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "937:7:8",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "929:24:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                "typeString": "mapping(bytes32 => bool)"
                            },
                            "valueType": {
                                "id": 4492,
                                "name": "bool",
                                "nodeType": "ElementaryTypeName",
                                "src": "948:4:8",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                }
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "c722f177",
                        "id": 4498,
                        "mutability": "mutable",
                        "name": "domains",
                        "nameLocation": "1009:7:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 5036,
                        "src": "977:39:8",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                            "typeString": "mapping(bytes32 => bool)"
                        },
                        "typeName": {
                            "id": 4497,
                            "keyType": {
                                "id": 4495,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "985:7:8",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "977:24:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                "typeString": "mapping(bytes32 => bool)"
                            },
                            "valueType": {
                                "id": 4496,
                                "name": "bool",
                                "nodeType": "ElementaryTypeName",
                                "src": "996:4:8",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                }
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 4502,
                        "mutability": "mutable",
                        "name": "nonces",
                        "nameLocation": "1116:6:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 5036,
                        "src": "1080:42:8",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                            "id": 4501,
                            "keyType": {
                                "id": 4499,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1088:7:8",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "1080:27:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                            },
                            "valueType": {
                                "id": 4500,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1099:7:8",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "visibility": "private"
                    },
                    {
                        "body": {
                            "id": 4505,
                            "nodeType": "Block",
                            "src": "1205:2:8",
                            "statements": []
                        },
                        "id": 4506,
                        "implemented": true,
                        "kind": "receive",
                        "modifiers": [],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4503,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1185:2:8"
                        },
                        "returnParameters": {
                            "id": 4504,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1205:0:8"
                        },
                        "scope": 5036,
                        "src": "1178:29:8",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5078
                        ],
                        "body": {
                            "id": 4519,
                            "nodeType": "Block",
                            "src": "1323:36:8",
                            "statements": [
                                {
                                    "expression": {
                                        "baseExpression": {
                                            "id": 4515,
                                            "name": "nonces",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4502,
                                            "src": "1340:6:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 4517,
                                        "indexExpression": {
                                            "id": 4516,
                                            "name": "from",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4509,
                                            "src": "1347:4:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "1340:12:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 4514,
                                    "id": 4518,
                                    "nodeType": "Return",
                                    "src": "1333:19:8"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4507,
                            "nodeType": "StructuredDocumentation",
                            "src": "1213:26:8",
                            "text": "@inheritdoc IForwarder"
                        },
                        "functionSelector": "2d0335ab",
                        "id": 4520,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getNonce",
                        "nameLocation": "1253:8:8",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4511,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1292:8:8"
                        },
                        "parameters": {
                            "id": 4510,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4509,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nameLocation": "1270:4:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4520,
                                    "src": "1262:12:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4508,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1262:7:8",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1261:14:8"
                        },
                        "returnParameters": {
                            "id": 4514,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4513,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4520,
                                    "src": "1314:7:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4512,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1314:7:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1313:9:8"
                        },
                        "scope": 5036,
                        "src": "1244:115:8",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 4539,
                            "nodeType": "Block",
                            "src": "1379:159:8",
                            "statements": [
                                {
                                    "assignments": [
                                        4524
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4524,
                                            "mutability": "mutable",
                                            "name": "requestType",
                                            "nameLocation": "1403:11:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4539,
                                            "src": "1389:25:8",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string"
                                            },
                                            "typeName": {
                                                "id": 4523,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1389:6:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_storage_ptr",
                                                    "typeString": "string"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4534,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "hexValue": "466f72776172645265717565737428",
                                                        "id": 4529,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "1441:17:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_02400580691f62fd612767b414e7b88f024d8265e514f15245995a20cf0d8379",
                                                            "typeString": "literal_string \"ForwardRequest(\""
                                                        },
                                                        "value": "ForwardRequest("
                                                    },
                                                    {
                                                        "id": 4530,
                                                        "name": "GENERIC_PARAMS",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4487,
                                                        "src": "1460:14:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    },
                                                    {
                                                        "hexValue": "29",
                                                        "id": 4531,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "1476:3:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_59d76dc3b33357eda30db1508968fbb18f21b9cd2442f1559b20154ddaa4d7ed",
                                                            "typeString": "literal_string \")\""
                                                        },
                                                        "value": ")"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_stringliteral_02400580691f62fd612767b414e7b88f024d8265e514f15245995a20cf0d8379",
                                                            "typeString": "literal_string \"ForwardRequest(\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_stringliteral_59d76dc3b33357eda30db1508968fbb18f21b9cd2442f1559b20154ddaa4d7ed",
                                                            "typeString": "literal_string \")\""
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 4527,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "1424:3:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 4528,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "src": "1424:16:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 4532,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1424:56:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 4526,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "1417:6:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                                "typeString": "type(string storage pointer)"
                                            },
                                            "typeName": {
                                                "id": 4525,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1417:6:8",
                                                "typeDescriptions": {}
                                            }
                                        },
                                        "id": 4533,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1417:64:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "1389:92:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4536,
                                                "name": "requestType",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4524,
                                                "src": "1519:11:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 4535,
                                            "name": "registerRequestTypeInternal",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4925,
                                            "src": "1491:27:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory)"
                                            }
                                        },
                                        "id": 4537,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1491:40:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4538,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1491:40:8"
                                }
                            ]
                        },
                        "id": 4540,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4521,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1376:2:8"
                        },
                        "returnParameters": {
                            "id": 4522,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1379:0:8"
                        },
                        "scope": 5036,
                        "src": "1365:173:8",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            12145,
                            12351
                        ],
                        "body": {
                            "id": 4563,
                            "nodeType": "Block",
                            "src": "1680:119:8",
                            "statements": [
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 4561,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                            },
                                            "id": 4556,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "id": 4551,
                                                "name": "interfaceId",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4543,
                                                "src": "1697:11:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "==",
                                            "rightExpression": {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "id": 4553,
                                                            "name": "IForwarder",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5129,
                                                            "src": "1717:10:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IForwarder_$5129_$",
                                                                "typeString": "type(contract IForwarder)"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_type$_t_contract$_IForwarder_$5129_$",
                                                                "typeString": "type(contract IForwarder)"
                                                            }
                                                        ],
                                                        "id": 4552,
                                                        "name": "type",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967269,
                                                        "src": "1712:4:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                            "typeString": "function () pure"
                                                        }
                                                    },
                                                    "id": 4554,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1712:16:8",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_meta_type_t_contract$_IForwarder_$5129",
                                                        "typeString": "type(contract IForwarder)"
                                                    }
                                                },
                                                "id": 4555,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "interfaceId",
                                                "nodeType": "MemberAccess",
                                                "src": "1712:28:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            },
                                            "src": "1697:43:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "||",
                                        "rightExpression": {
                                            "arguments": [
                                                {
                                                    "id": 4559,
                                                    "name": "interfaceId",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4543,
                                                    "src": "1780:11:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 4557,
                                                    "name": "super",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967271,
                                                    "src": "1756:5:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_super$_Forwarder_$5036_$",
                                                        "typeString": "type(contract super Forwarder)"
                                                    }
                                                },
                                                "id": 4558,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "supportsInterface",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 12145,
                                                "src": "1756:23:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                                    "typeString": "function (bytes4) view returns (bool)"
                                                }
                                            },
                                            "id": 4560,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1756:36:8",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "1697:95:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 4550,
                                    "id": 4562,
                                    "nodeType": "Return",
                                    "src": "1690:102:8"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4541,
                            "nodeType": "StructuredDocumentation",
                            "src": "1544:23:8",
                            "text": "@inheritdoc IERC165"
                        },
                        "functionSelector": "01ffc9a7",
                        "id": 4564,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "supportsInterface",
                        "nameLocation": "1581:17:8",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4547,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [
                                {
                                    "id": 4545,
                                    "name": "IERC165",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 12352,
                                    "src": "1648:7:8"
                                },
                                {
                                    "id": 4546,
                                    "name": "ERC165",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 12146,
                                    "src": "1657:6:8"
                                }
                            ],
                            "src": "1639:25:8"
                        },
                        "parameters": {
                            "id": 4544,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4543,
                                    "mutability": "mutable",
                                    "name": "interfaceId",
                                    "nameLocation": "1606:11:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4564,
                                    "src": "1599:18:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    },
                                    "typeName": {
                                        "id": 4542,
                                        "name": "bytes4",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1599:6:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1598:20:8"
                        },
                        "returnParameters": {
                            "id": 4550,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4549,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4564,
                                    "src": "1674:4:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 4548,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1674:4:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1673:6:8"
                        },
                        "scope": 5036,
                        "src": "1572:227:8",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5093
                        ],
                        "body": {
                            "id": 4592,
                            "nodeType": "Block",
                            "src": "2046:110:8",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4581,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4568,
                                                "src": "2069:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                }
                                            ],
                                            "id": 4580,
                                            "name": "_verifyNonce",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4756,
                                            "src": "2056:12:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_struct$_ForwardRequest_$5058_calldata_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest calldata) view"
                                            }
                                        },
                                        "id": 4582,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2056:17:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4583,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2056:17:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4585,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4568,
                                                "src": "2094:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                }
                                            },
                                            {
                                                "id": 4586,
                                                "name": "domainSeparator",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4570,
                                                "src": "2099:15:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 4587,
                                                "name": "requestTypeHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4572,
                                                "src": "2116:15:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 4588,
                                                "name": "suffixData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4574,
                                                "src": "2133:10:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 4589,
                                                "name": "sig",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4576,
                                                "src": "2145:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "id": 4584,
                                            "name": "_verifySig",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4987,
                                            "src": "2083:10:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_struct$_ForwardRequest_$5058_calldata_ptr_$_t_bytes32_$_t_bytes32_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest calldata,bytes32,bytes32,bytes calldata,bytes calldata) view"
                                            }
                                        },
                                        "id": 4590,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2083:66:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4591,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2083:66:8"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4565,
                            "nodeType": "StructuredDocumentation",
                            "src": "1805:26:8",
                            "text": "@inheritdoc IForwarder"
                        },
                        "functionSelector": "ad9f99c7",
                        "id": 4593,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "verify",
                        "nameLocation": "1845:6:8",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4578,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2032:8:8"
                        },
                        "parameters": {
                            "id": 4577,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4568,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nameLocation": "1885:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4593,
                                    "src": "1861:27:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "id": 4567,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4566,
                                            "name": "ForwardRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5058,
                                            "src": "1861:14:8"
                                        },
                                        "referencedDeclaration": 5058,
                                        "src": "1861:14:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4570,
                                    "mutability": "mutable",
                                    "name": "domainSeparator",
                                    "nameLocation": "1906:15:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4593,
                                    "src": "1898:23:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 4569,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1898:7:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4572,
                                    "mutability": "mutable",
                                    "name": "requestTypeHash",
                                    "nameLocation": "1939:15:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4593,
                                    "src": "1931:23:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 4571,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1931:7:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4574,
                                    "mutability": "mutable",
                                    "name": "suffixData",
                                    "nameLocation": "1979:10:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4593,
                                    "src": "1964:25:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4573,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1964:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4576,
                                    "mutability": "mutable",
                                    "name": "sig",
                                    "nameLocation": "2014:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4593,
                                    "src": "1999:18:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4575,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1999:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1851:167:8"
                        },
                        "returnParameters": {
                            "id": 4579,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2046:0:8"
                        },
                        "scope": 5036,
                        "src": "1836:320:8",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5112
                        ],
                        "body": {
                            "id": 4737,
                            "nodeType": "Block",
                            "src": "2461:1052:8",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4614,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4597,
                                                "src": "2482:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                }
                                            },
                                            {
                                                "id": 4615,
                                                "name": "domainSeparator",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4599,
                                                "src": "2487:15:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 4616,
                                                "name": "requestTypeHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4601,
                                                "src": "2504:15:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 4617,
                                                "name": "suffixData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4603,
                                                "src": "2521:10:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 4618,
                                                "name": "sig",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4605,
                                                "src": "2533:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "id": 4613,
                                            "name": "_verifySig",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4987,
                                            "src": "2471:10:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_struct$_ForwardRequest_$5058_calldata_ptr_$_t_bytes32_$_t_bytes32_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest calldata,bytes32,bytes32,bytes calldata,bytes calldata) view"
                                            }
                                        },
                                        "id": 4619,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2471:66:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4620,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2471:66:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4622,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4597,
                                                "src": "2569:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                }
                                            ],
                                            "id": 4621,
                                            "name": "_verifyAndUpdateNonce",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4775,
                                            "src": "2547:21:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_ForwardRequest_$5058_calldata_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest calldata)"
                                            }
                                        },
                                        "id": 4623,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2547:26:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4624,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2547:26:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 4635,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 4629,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "id": 4626,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4597,
                                                            "src": "2592:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 4627,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "validUntilTime",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5057,
                                                        "src": "2592:18:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "==",
                                                    "rightExpression": {
                                                        "hexValue": "30",
                                                        "id": 4628,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "2614:1:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    },
                                                    "src": "2592:23:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "||",
                                                "rightExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 4634,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "id": 4630,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4597,
                                                            "src": "2619:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 4631,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "validUntilTime",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5057,
                                                        "src": "2619:18:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": ">",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 4632,
                                                            "name": "block",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967292,
                                                            "src": "2640:5:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_block",
                                                                "typeString": "block"
                                                            }
                                                        },
                                                        "id": 4633,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "timestamp",
                                                        "nodeType": "MemberAccess",
                                                        "src": "2640:15:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "2619:36:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "2592:63:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4657443a20726571756573742065787069726564",
                                                "id": 4636,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2657:22:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_ab154ef4311c2ad00e291c382ac923b2a662954ff9fe757e2f5b71d1333fbc84",
                                                    "typeString": "literal_string \"FWD: request expired\""
                                                },
                                                "value": "FWD: request expired"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_ab154ef4311c2ad00e291c382ac923b2a662954ff9fe757e2f5b71d1333fbc84",
                                                    "typeString": "literal_string \"FWD: request expired\""
                                                }
                                            ],
                                            "id": 4625,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2584:7:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4637,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2584:96:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4638,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2584:96:8"
                                },
                                {
                                    "assignments": [
                                        4640
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4640,
                                            "mutability": "mutable",
                                            "name": "gasForTransfer",
                                            "nameLocation": "2699:14:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4737,
                                            "src": "2691:22:8",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 4639,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2691:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4642,
                                    "initialValue": {
                                        "hexValue": "30",
                                        "id": 4641,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "2716:1:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2691:26:8"
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 4646,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 4643,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4597,
                                                "src": "2732:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                }
                                            },
                                            "id": 4644,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "value",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5049,
                                            "src": "2732:9:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "!=",
                                        "rightExpression": {
                                            "hexValue": "30",
                                            "id": 4645,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "2745:1:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "2732:14:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 4652,
                                    "nodeType": "IfStatement",
                                    "src": "2727:129:8",
                                    "trueBody": {
                                        "id": 4651,
                                        "nodeType": "Block",
                                        "src": "2749:107:8",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "id": 4649,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "id": 4647,
                                                        "name": "gasForTransfer",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4640,
                                                        "src": "2763:14:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "hexValue": "3430303030",
                                                        "id": 4648,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "2780:5:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_40000_by_1",
                                                            "typeString": "int_const 40000"
                                                        },
                                                        "value": "40000"
                                                    },
                                                    "src": "2763:22:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 4650,
                                                "nodeType": "ExpressionStatement",
                                                "src": "2763:22:8"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "assignments": [
                                        4654
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4654,
                                            "mutability": "mutable",
                                            "name": "callData",
                                            "nameLocation": "2878:8:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4737,
                                            "src": "2865:21:8",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 4653,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2865:5:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4662,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 4657,
                                                    "name": "req",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4597,
                                                    "src": "2906:3:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 4658,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "data",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5055,
                                                "src": "2906:8:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 4659,
                                                    "name": "req",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4597,
                                                    "src": "2916:3:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 4660,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "from",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5045,
                                                "src": "2916:8:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 4655,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967295,
                                                "src": "2889:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 4656,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encodePacked",
                                            "nodeType": "MemberAccess",
                                            "src": "2889:16:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 4661,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2889:36:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2865:60:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4674,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 4669,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 4667,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "arguments": [],
                                                            "expression": {
                                                                "argumentTypes": [],
                                                                "id": 4664,
                                                                "name": "gasleft",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4294967289,
                                                                "src": "2943:7:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                                    "typeString": "function () view returns (uint256)"
                                                                }
                                                            },
                                                            "id": 4665,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "2943:9:8",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "*",
                                                        "rightExpression": {
                                                            "hexValue": "3633",
                                                            "id": 4666,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "2953:2:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_63_by_1",
                                                                "typeString": "int_const 63"
                                                            },
                                                            "value": "63"
                                                        },
                                                        "src": "2943:12:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "/",
                                                    "rightExpression": {
                                                        "hexValue": "3634",
                                                        "id": 4668,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "2956:2:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_64_by_1",
                                                            "typeString": "int_const 64"
                                                        },
                                                        "value": "64"
                                                    },
                                                    "src": "2943:15:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 4673,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "id": 4670,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4597,
                                                            "src": "2962:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 4671,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gas",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5051,
                                                        "src": "2962:7:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "id": 4672,
                                                        "name": "gasForTransfer",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4640,
                                                        "src": "2972:14:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "2962:24:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "2943:43:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4657443a20696e73756666696369656e7420676173",
                                                "id": 4675,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2988:23:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_aa54c663771d7d8513fcfc47d540cac7797a601046192d773181437760454721",
                                                    "typeString": "literal_string \"FWD: insufficient gas\""
                                                },
                                                "value": "FWD: insufficient gas"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_aa54c663771d7d8513fcfc47d540cac7797a601046192d773181437760454721",
                                                    "typeString": "literal_string \"FWD: insufficient gas\""
                                                }
                                            ],
                                            "id": 4663,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2935:7:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4676,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2935:77:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4677,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2935:77:8"
                                },
                                {
                                    "expression": {
                                        "id": 4691,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "components": [
                                                {
                                                    "id": 4678,
                                                    "name": "success",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4609,
                                                    "src": "3082:7:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                {
                                                    "id": 4679,
                                                    "name": "ret",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4611,
                                                    "src": "3090:3:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                }
                                            ],
                                            "id": 4680,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "TupleExpression",
                                            "src": "3081:13:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                "typeString": "tuple(bool,bytes memory)"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "id": 4689,
                                                    "name": "callData",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4654,
                                                    "src": "3143:8:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "expression": {
                                                            "id": 4681,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4597,
                                                            "src": "3097:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 4682,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "to",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5047,
                                                        "src": "3097:6:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "id": 4683,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "call",
                                                    "nodeType": "MemberAccess",
                                                    "src": "3097:11:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                    }
                                                },
                                                "id": 4688,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "names": [
                                                    "gas",
                                                    "value"
                                                ],
                                                "nodeType": "FunctionCallOptions",
                                                "options": [
                                                    {
                                                        "expression": {
                                                            "id": 4684,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4597,
                                                            "src": "3115:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 4685,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gas",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5051,
                                                        "src": "3115:7:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "expression": {
                                                            "id": 4686,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4597,
                                                            "src": "3132:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 4687,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "value",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5049,
                                                        "src": "3132:9:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "src": "3097:45:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gasvalue",
                                                    "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                }
                                            },
                                            "id": 4690,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3097:55:8",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                "typeString": "tuple(bool,bytes memory)"
                                            }
                                        },
                                        "src": "3081:71:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4692,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3081:71:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "6578656375746520726573756c743a20737563636573733a202573207265743a",
                                                "id": 4696,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3175:34:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_7834b284c5714d55c832c27bef2bd1b2419dab4984436cf16c324585d607d178",
                                                    "typeString": "literal_string \"execute result: success: %s ret:\""
                                                },
                                                "value": "execute result: success: %s ret:"
                                            },
                                            {
                                                "id": 4697,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4609,
                                                "src": "3211:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_7834b284c5714d55c832c27bef2bd1b2419dab4984436cf16c324585d607d178",
                                                    "typeString": "literal_string \"execute result: success: %s ret:\""
                                                },
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            ],
                                            "expression": {
                                                "id": 4693,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "3163:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 4695,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13598,
                                            "src": "3163:11:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_bool_$returns$__$",
                                                "typeString": "function (string memory,bool) view"
                                            }
                                        },
                                        "id": 4698,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3163:56:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4699,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3163:56:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4703,
                                                "name": "ret",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4611,
                                                "src": "3246:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "id": 4700,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "3229:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 4702,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "logBytes",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12975,
                                            "src": "3229:16:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes memory) view"
                                            }
                                        },
                                        "id": 4704,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3229:21:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4705,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3229:21:8"
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 4717,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 4709,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "id": 4706,
                                                    "name": "req",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4597,
                                                    "src": "3266:3:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 4707,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "value",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5049,
                                                "src": "3266:9:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "!=",
                                            "rightExpression": {
                                                "hexValue": "30",
                                                "id": 4708,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3279:1:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            "src": "3266:14:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 4716,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "id": 4712,
                                                            "name": "this",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967268,
                                                            "src": "3292:4:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_Forwarder_$5036",
                                                                "typeString": "contract Forwarder"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_contract$_Forwarder_$5036",
                                                                "typeString": "contract Forwarder"
                                                            }
                                                        ],
                                                        "id": 4711,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "3284:7:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 4710,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3284:7:8",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 4713,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3284:13:8",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "id": 4714,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "balance",
                                                "nodeType": "MemberAccess",
                                                "src": "3284:21:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": ">",
                                            "rightExpression": {
                                                "hexValue": "30",
                                                "id": 4715,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3306:1:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            "src": "3284:23:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "3266:41:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 4732,
                                    "nodeType": "IfStatement",
                                    "src": "3261:215:8",
                                    "trueBody": {
                                        "id": 4731,
                                        "nodeType": "Block",
                                        "src": "3310:166:8",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "expression": {
                                                                "arguments": [
                                                                    {
                                                                        "id": 4726,
                                                                        "name": "this",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 4294967268,
                                                                        "src": "3451:4:8",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_contract$_Forwarder_$5036",
                                                                            "typeString": "contract Forwarder"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_contract$_Forwarder_$5036",
                                                                            "typeString": "contract Forwarder"
                                                                        }
                                                                    ],
                                                                    "id": 4725,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "3443:7:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_address_$",
                                                                        "typeString": "type(address)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 4724,
                                                                        "name": "address",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "3443:7:8",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                },
                                                                "id": 4727,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "3443:13:8",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "id": 4728,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "balance",
                                                            "nodeType": "MemberAccess",
                                                            "src": "3443:21:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "expression": {
                                                                        "id": 4720,
                                                                        "name": "req",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 4597,
                                                                        "src": "3424:3:8",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                            "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                        }
                                                                    },
                                                                    "id": 4721,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "from",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 5045,
                                                                    "src": "3424:8:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_address",
                                                                        "typeString": "address"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_address",
                                                                        "typeString": "address"
                                                                    }
                                                                ],
                                                                "id": 4719,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "3416:8:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_payable_$",
                                                                    "typeString": "type(address payable)"
                                                                },
                                                                "typeName": {
                                                                    "id": 4718,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "3416:8:8",
                                                                    "stateMutability": "payable",
                                                                    "typeDescriptions": {}
                                                                }
                                                            },
                                                            "id": 4722,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "3416:17:8",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        "id": 4723,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "transfer",
                                                        "nodeType": "MemberAccess",
                                                        "src": "3416:26:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                                            "typeString": "function (uint256)"
                                                        }
                                                    },
                                                    "id": 4729,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3416:49:8",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 4730,
                                                "nodeType": "ExpressionStatement",
                                                "src": "3416:49:8"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 4733,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4609,
                                                "src": "3494:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "id": 4734,
                                                "name": "ret",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4611,
                                                "src": "3502:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "id": 4735,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "3493:13:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(bool,bytes memory)"
                                        }
                                    },
                                    "functionReturnParameters": 4612,
                                    "id": 4736,
                                    "nodeType": "Return",
                                    "src": "3486:20:8"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4594,
                            "nodeType": "StructuredDocumentation",
                            "src": "2162:26:8",
                            "text": "@inheritdoc IForwarder"
                        },
                        "functionSelector": "e024dc7f",
                        "id": 4738,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "execute",
                        "nameLocation": "2202:7:8",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4607,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2407:8:8"
                        },
                        "parameters": {
                            "id": 4606,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4597,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nameLocation": "2243:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4738,
                                    "src": "2219:27:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "id": 4596,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4595,
                                            "name": "ForwardRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5058,
                                            "src": "2219:14:8"
                                        },
                                        "referencedDeclaration": 5058,
                                        "src": "2219:14:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4599,
                                    "mutability": "mutable",
                                    "name": "domainSeparator",
                                    "nameLocation": "2264:15:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4738,
                                    "src": "2256:23:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 4598,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2256:7:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4601,
                                    "mutability": "mutable",
                                    "name": "requestTypeHash",
                                    "nameLocation": "2297:15:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4738,
                                    "src": "2289:23:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 4600,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2289:7:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4603,
                                    "mutability": "mutable",
                                    "name": "suffixData",
                                    "nameLocation": "2337:10:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4738,
                                    "src": "2322:25:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4602,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2322:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4605,
                                    "mutability": "mutable",
                                    "name": "sig",
                                    "nameLocation": "2372:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4738,
                                    "src": "2357:18:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4604,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2357:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2209:172:8"
                        },
                        "returnParameters": {
                            "id": 4612,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4609,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nameLocation": "2434:7:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4738,
                                    "src": "2429:12:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 4608,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2429:4:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4611,
                                    "mutability": "mutable",
                                    "name": "ret",
                                    "nameLocation": "2456:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4738,
                                    "src": "2443:16:8",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4610,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2443:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2428:32:8"
                        },
                        "scope": 5036,
                        "src": "2193:1320:8",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 4755,
                            "nodeType": "Block",
                            "src": "3584:78:8",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4751,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "baseExpression": {
                                                        "id": 4745,
                                                        "name": "nonces",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4502,
                                                        "src": "3602:6:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 4748,
                                                    "indexExpression": {
                                                        "expression": {
                                                            "id": 4746,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4741,
                                                            "src": "3609:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 4747,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "from",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5045,
                                                        "src": "3609:8:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "3602:16:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 4749,
                                                        "name": "req",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4741,
                                                        "src": "3622:3:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                            "typeString": "struct IForwarder.ForwardRequest calldata"
                                                        }
                                                    },
                                                    "id": 4750,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "nonce",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5053,
                                                    "src": "3622:9:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "3602:29:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4657443a206e6f6e6365206d69736d61746368",
                                                "id": 4752,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3633:21:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_a6c513f883265bc3929a475166103a6e13fbf0ec93c23813d2faa03ddaf1aaa1",
                                                    "typeString": "literal_string \"FWD: nonce mismatch\""
                                                },
                                                "value": "FWD: nonce mismatch"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_a6c513f883265bc3929a475166103a6e13fbf0ec93c23813d2faa03ddaf1aaa1",
                                                    "typeString": "literal_string \"FWD: nonce mismatch\""
                                                }
                                            ],
                                            "id": 4744,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "3594:7:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4753,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3594:61:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4754,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3594:61:8"
                                }
                            ]
                        },
                        "id": 4756,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifyNonce",
                        "nameLocation": "3528:12:8",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4742,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4741,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nameLocation": "3565:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4756,
                                    "src": "3541:27:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "id": 4740,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4739,
                                            "name": "ForwardRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5058,
                                            "src": "3541:14:8"
                                        },
                                        "referencedDeclaration": 5058,
                                        "src": "3541:14:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3540:29:8"
                        },
                        "returnParameters": {
                            "id": 4743,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3584:0:8"
                        },
                        "scope": 5036,
                        "src": "3519:143:8",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 4774,
                            "nodeType": "Block",
                            "src": "3737:80:8",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4770,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 4767,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "UnaryOperation",
                                                    "operator": "++",
                                                    "prefix": false,
                                                    "src": "3755:18:8",
                                                    "subExpression": {
                                                        "baseExpression": {
                                                            "id": 4763,
                                                            "name": "nonces",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4502,
                                                            "src": "3755:6:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                "typeString": "mapping(address => uint256)"
                                                            }
                                                        },
                                                        "id": 4766,
                                                        "indexExpression": {
                                                            "expression": {
                                                                "id": 4764,
                                                                "name": "req",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4759,
                                                                "src": "3762:3:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                }
                                                            },
                                                            "id": 4765,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "from",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 5045,
                                                            "src": "3762:8:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": true,
                                                        "nodeType": "IndexAccess",
                                                        "src": "3755:16:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 4768,
                                                        "name": "req",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4759,
                                                        "src": "3777:3:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                            "typeString": "struct IForwarder.ForwardRequest calldata"
                                                        }
                                                    },
                                                    "id": 4769,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "nonce",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5053,
                                                    "src": "3777:9:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "3755:31:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4657443a206e6f6e6365206d69736d61746368",
                                                "id": 4771,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3788:21:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_a6c513f883265bc3929a475166103a6e13fbf0ec93c23813d2faa03ddaf1aaa1",
                                                    "typeString": "literal_string \"FWD: nonce mismatch\""
                                                },
                                                "value": "FWD: nonce mismatch"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_a6c513f883265bc3929a475166103a6e13fbf0ec93c23813d2faa03ddaf1aaa1",
                                                    "typeString": "literal_string \"FWD: nonce mismatch\""
                                                }
                                            ],
                                            "id": 4762,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "3747:7:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4772,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3747:63:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4773,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3747:63:8"
                                }
                            ]
                        },
                        "id": 4775,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifyAndUpdateNonce",
                        "nameLocation": "3677:21:8",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4760,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4759,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nameLocation": "3723:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4775,
                                    "src": "3699:27:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "id": 4758,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4757,
                                            "name": "ForwardRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5058,
                                            "src": "3699:14:8"
                                        },
                                        "referencedDeclaration": 5058,
                                        "src": "3699:14:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3698:29:8"
                        },
                        "returnParameters": {
                            "id": 4761,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3737:0:8"
                        },
                        "scope": 5036,
                        "src": "3668:149:8",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            5120
                        ],
                        "body": {
                            "id": 4838,
                            "nodeType": "Block",
                            "src": "3955:353:8",
                            "statements": [
                                {
                                    "body": {
                                        "id": 4818,
                                        "nodeType": "Block",
                                        "src": "4019:122:8",
                                        "statements": [
                                            {
                                                "assignments": [
                                                    4799
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 4799,
                                                        "mutability": "mutable",
                                                        "name": "c",
                                                        "nameLocation": "4040:1:8",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 4818,
                                                        "src": "4033:8:8",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes1",
                                                            "typeString": "bytes1"
                                                        },
                                                        "typeName": {
                                                            "id": 4798,
                                                            "name": "bytes1",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "4033:6:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes1",
                                                                "typeString": "bytes1"
                                                            }
                                                        },
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 4806,
                                                "initialValue": {
                                                    "baseExpression": {
                                                        "arguments": [
                                                            {
                                                                "id": 4802,
                                                                "name": "typeName",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4778,
                                                                "src": "4050:8:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            ],
                                                            "id": 4801,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "4044:5:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                                "id": 4800,
                                                                "name": "bytes",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "4044:5:8",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 4803,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4044:15:8",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    },
                                                    "id": 4805,
                                                    "indexExpression": {
                                                        "id": 4804,
                                                        "name": "i",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4785,
                                                        "src": "4060:1:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "4044:18:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes1",
                                                        "typeString": "bytes1"
                                                    }
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "4033:29:8"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            "id": 4814,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "commonType": {
                                                                    "typeIdentifier": "t_bytes1",
                                                                    "typeString": "bytes1"
                                                                },
                                                                "id": 4810,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "id": 4808,
                                                                    "name": "c",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4799,
                                                                    "src": "4084:1:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes1",
                                                                        "typeString": "bytes1"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "!=",
                                                                "rightExpression": {
                                                                    "hexValue": "28",
                                                                    "id": 4809,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "string",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "4089:3:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_stringliteral_484bf06f3118ce360605f902ef526c45207bc469c2b056352f14b8408f9f6f9a",
                                                                        "typeString": "literal_string \"(\""
                                                                    },
                                                                    "value": "("
                                                                },
                                                                "src": "4084:8:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "&&",
                                                            "rightExpression": {
                                                                "commonType": {
                                                                    "typeIdentifier": "t_bytes1",
                                                                    "typeString": "bytes1"
                                                                },
                                                                "id": 4813,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "id": 4811,
                                                                    "name": "c",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4799,
                                                                    "src": "4096:1:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes1",
                                                                        "typeString": "bytes1"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "!=",
                                                                "rightExpression": {
                                                                    "hexValue": "29",
                                                                    "id": 4812,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "string",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "4101:3:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_stringliteral_59d76dc3b33357eda30db1508968fbb18f21b9cd2442f1559b20154ddaa4d7ed",
                                                                        "typeString": "literal_string \")\""
                                                                    },
                                                                    "value": ")"
                                                                },
                                                                "src": "4096:8:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "src": "4084:20:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "4657443a20696e76616c696420747970656e616d65",
                                                            "id": 4815,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "4106:23:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_e889225bc6a63582ffd8243051026e25d8ef07d76640e99b95269c2397ffbcba",
                                                                "typeString": "literal_string \"FWD: invalid typename\""
                                                            },
                                                            "value": "FWD: invalid typename"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_e889225bc6a63582ffd8243051026e25d8ef07d76640e99b95269c2397ffbcba",
                                                                "typeString": "literal_string \"FWD: invalid typename\""
                                                            }
                                                        ],
                                                        "id": 4807,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "4076:7:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 4816,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "4076:54:8",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 4817,
                                                "nodeType": "ExpressionStatement",
                                                "src": "4076:54:8"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 4794,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 4788,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4785,
                                            "src": "3986:1:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "expression": {
                                                "arguments": [
                                                    {
                                                        "id": 4791,
                                                        "name": "typeName",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4778,
                                                        "src": "3996:8:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    ],
                                                    "id": 4790,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "3990:5:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                        "typeString": "type(bytes storage pointer)"
                                                    },
                                                    "typeName": {
                                                        "id": 4789,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "3990:5:8",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 4792,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3990:15:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            "id": 4793,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "3990:22:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3986:26:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 4819,
                                    "initializationExpression": {
                                        "assignments": [
                                            4785
                                        ],
                                        "declarations": [
                                            {
                                                "constant": false,
                                                "id": 4785,
                                                "mutability": "mutable",
                                                "name": "i",
                                                "nameLocation": "3979:1:8",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 4819,
                                                "src": "3971:9:8",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 4784,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "3971:7:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "id": 4787,
                                        "initialValue": {
                                            "hexValue": "30",
                                            "id": 4786,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "3983:1:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "3971:13:8"
                                    },
                                    "loopExpression": {
                                        "expression": {
                                            "id": 4796,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "++",
                                            "prefix": false,
                                            "src": "4014:3:8",
                                            "subExpression": {
                                                "id": 4795,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4785,
                                                "src": "4014:1:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 4797,
                                        "nodeType": "ExpressionStatement",
                                        "src": "4014:3:8"
                                    },
                                    "nodeType": "ForStatement",
                                    "src": "3966:175:8"
                                },
                                {
                                    "assignments": [
                                        4821
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4821,
                                            "mutability": "mutable",
                                            "name": "requestType",
                                            "nameLocation": "4165:11:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4838,
                                            "src": "4151:25:8",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string"
                                            },
                                            "typeName": {
                                                "id": 4820,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4151:6:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_storage_ptr",
                                                    "typeString": "string"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4833,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 4826,
                                                        "name": "typeName",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4778,
                                                        "src": "4203:8:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    },
                                                    {
                                                        "hexValue": "28",
                                                        "id": 4827,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "4213:3:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_484bf06f3118ce360605f902ef526c45207bc469c2b056352f14b8408f9f6f9a",
                                                            "typeString": "literal_string \"(\""
                                                        },
                                                        "value": "("
                                                    },
                                                    {
                                                        "id": 4828,
                                                        "name": "GENERIC_PARAMS",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4487,
                                                        "src": "4218:14:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    },
                                                    {
                                                        "hexValue": "2c",
                                                        "id": 4829,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "4234:3:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_3e7a35b97029f9e0cf6effd71c1a7958822e9a217d3a3aec886668a7dd8231cb",
                                                            "typeString": "literal_string \",\""
                                                        },
                                                        "value": ","
                                                    },
                                                    {
                                                        "id": 4830,
                                                        "name": "typeSuffix",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4780,
                                                        "src": "4239:10:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_stringliteral_484bf06f3118ce360605f902ef526c45207bc469c2b056352f14b8408f9f6f9a",
                                                            "typeString": "literal_string \"(\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_stringliteral_3e7a35b97029f9e0cf6effd71c1a7958822e9a217d3a3aec886668a7dd8231cb",
                                                            "typeString": "literal_string \",\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 4824,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "4186:3:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 4825,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "src": "4186:16:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 4831,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4186:64:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 4823,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "4179:6:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                                "typeString": "type(string storage pointer)"
                                            },
                                            "typeName": {
                                                "id": 4822,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4179:6:8",
                                                "typeDescriptions": {}
                                            }
                                        },
                                        "id": 4832,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4179:72:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4151:100:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4835,
                                                "name": "requestType",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4821,
                                                "src": "4289:11:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 4834,
                                            "name": "registerRequestTypeInternal",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4925,
                                            "src": "4261:27:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory)"
                                            }
                                        },
                                        "id": 4836,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4261:40:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4837,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4261:40:8"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4776,
                            "nodeType": "StructuredDocumentation",
                            "src": "3823:26:8",
                            "text": "@inheritdoc IForwarder"
                        },
                        "functionSelector": "d9210be5",
                        "id": 4839,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "registerRequestType",
                        "nameLocation": "3863:19:8",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4782,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3946:8:8"
                        },
                        "parameters": {
                            "id": 4781,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4778,
                                    "mutability": "mutable",
                                    "name": "typeName",
                                    "nameLocation": "3899:8:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4839,
                                    "src": "3883:24:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 4777,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3883:6:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4780,
                                    "mutability": "mutable",
                                    "name": "typeSuffix",
                                    "nameLocation": "3925:10:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4839,
                                    "src": "3909:26:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 4779,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3909:6:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3882:54:8"
                        },
                        "returnParameters": {
                            "id": 4783,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3955:0:8"
                        },
                        "scope": 5036,
                        "src": "3854:454:8",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5128
                        ],
                        "body": {
                            "id": 4898,
                            "nodeType": "Block",
                            "src": "4443:502:8",
                            "statements": [
                                {
                                    "assignments": [
                                        4849
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4849,
                                            "mutability": "mutable",
                                            "name": "chainId",
                                            "nameLocation": "4461:7:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4898,
                                            "src": "4453:15:8",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 4848,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4453:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4850,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4453:15:8"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "4546:24:8",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "4548:20:8",
                                                "value": {
                                                    "arguments": [],
                                                    "functionName": {
                                                        "name": "chainid",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4559:7:8"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "4559:9:8"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "chainId",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4548:7:8"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "evmVersion": "london",
                                    "externalReferences": [
                                        {
                                            "declaration": 4849,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "4548:7:8",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 4851,
                                    "nodeType": "InlineAssembly",
                                    "src": "4537:33:8"
                                },
                                {
                                    "assignments": [
                                        4853
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4853,
                                            "mutability": "mutable",
                                            "name": "domainValue",
                                            "nameLocation": "4593:11:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4898,
                                            "src": "4580:24:8",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 4852,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4580:5:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4880,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "id": 4859,
                                                                "name": "EIP712_DOMAIN_TYPE",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4490,
                                                                "src": "4647:18:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_string_memory_ptr",
                                                                    "typeString": "string memory"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_string_memory_ptr",
                                                                    "typeString": "string memory"
                                                                }
                                                            ],
                                                            "id": 4858,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "4641:5:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                                "id": 4857,
                                                                "name": "bytes",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "4641:5:8",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 4860,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4641:25:8",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "id": 4856,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967288,
                                                    "src": "4631:9:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 4861,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4631:36:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "id": 4865,
                                                                "name": "name",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4842,
                                                                "src": "4697:4:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            ],
                                                            "id": 4864,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "4691:5:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                                "id": 4863,
                                                                "name": "bytes",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "4691:5:8",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 4866,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4691:11:8",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    ],
                                                    "id": 4862,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967288,
                                                    "src": "4681:9:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 4867,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4681:22:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "id": 4871,
                                                                "name": "version",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4844,
                                                                "src": "4733:7:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            ],
                                                            "id": 4870,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "4727:5:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                                "id": 4869,
                                                                "name": "bytes",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "4727:5:8",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 4872,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4727:14:8",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    ],
                                                    "id": 4868,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967288,
                                                    "src": "4717:9:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 4873,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4717:25:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 4874,
                                                "name": "chainId",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4849,
                                                "src": "4756:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 4877,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967268,
                                                        "src": "4785:4:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_Forwarder_$5036",
                                                            "typeString": "contract Forwarder"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_Forwarder_$5036",
                                                            "typeString": "contract Forwarder"
                                                        }
                                                    ],
                                                    "id": 4876,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "4777:7:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 4875,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "4777:7:8",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 4878,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4777:13:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 4854,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967295,
                                                "src": "4607:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 4855,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encode",
                                            "nodeType": "MemberAccess",
                                            "src": "4607:10:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 4879,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4607:184:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4580:211:8"
                                },
                                {
                                    "assignments": [
                                        4882
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4882,
                                            "mutability": "mutable",
                                            "name": "domainHash",
                                            "nameLocation": "4810:10:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4898,
                                            "src": "4802:18:8",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            },
                                            "typeName": {
                                                "id": 4881,
                                                "name": "bytes32",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4802:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4886,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 4884,
                                                "name": "domainValue",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4853,
                                                "src": "4833:11:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 4883,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967288,
                                            "src": "4823:9:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 4885,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4823:22:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4802:43:8"
                                },
                                {
                                    "expression": {
                                        "id": 4891,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 4887,
                                                "name": "domains",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4498,
                                                "src": "4856:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                                    "typeString": "mapping(bytes32 => bool)"
                                                }
                                            },
                                            "id": 4889,
                                            "indexExpression": {
                                                "id": 4888,
                                                "name": "domainHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4882,
                                                "src": "4864:10:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "4856:19:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "74727565",
                                            "id": 4890,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "bool",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "4878:4:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "value": "true"
                                        },
                                        "src": "4856:26:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 4892,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4856:26:8"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 4894,
                                                "name": "domainHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4882,
                                                "src": "4914:10:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 4895,
                                                "name": "domainValue",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4853,
                                                "src": "4926:11:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 4893,
                                            "name": "DomainRegistered",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5064,
                                            "src": "4897:16:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes32,bytes memory)"
                                            }
                                        },
                                        "id": 4896,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4897:41:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4897,
                                    "nodeType": "EmitStatement",
                                    "src": "4892:46:8"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4840,
                            "nodeType": "StructuredDocumentation",
                            "src": "4314:26:8",
                            "text": "@inheritdoc IForwarder"
                        },
                        "functionSelector": "9c7b4592",
                        "id": 4899,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "registerDomainSeparator",
                        "nameLocation": "4354:23:8",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4846,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4434:8:8"
                        },
                        "parameters": {
                            "id": 4845,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4842,
                                    "mutability": "mutable",
                                    "name": "name",
                                    "nameLocation": "4394:4:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4899,
                                    "src": "4378:20:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 4841,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4378:6:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4844,
                                    "mutability": "mutable",
                                    "name": "version",
                                    "nameLocation": "4416:7:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4899,
                                    "src": "4400:23:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 4843,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4400:6:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4377:47:8"
                        },
                        "returnParameters": {
                            "id": 4847,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4443:0:8"
                        },
                        "scope": 5036,
                        "src": "4345:600:8",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 4924,
                            "nodeType": "Block",
                            "src": "5024:183:8",
                            "statements": [
                                {
                                    "assignments": [
                                        4905
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4905,
                                            "mutability": "mutable",
                                            "name": "requestTypehash",
                                            "nameLocation": "5043:15:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4924,
                                            "src": "5035:23:8",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            },
                                            "typeName": {
                                                "id": 4904,
                                                "name": "bytes32",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5035:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4912,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 4909,
                                                        "name": "requestType",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4901,
                                                        "src": "5077:11:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    ],
                                                    "id": 4908,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "5071:5:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                        "typeString": "type(bytes storage pointer)"
                                                    },
                                                    "typeName": {
                                                        "id": 4907,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "5071:5:8",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 4910,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "5071:18:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 4906,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967288,
                                            "src": "5061:9:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 4911,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5061:29:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5035:55:8"
                                },
                                {
                                    "expression": {
                                        "id": 4917,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 4913,
                                                "name": "typeHashes",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4494,
                                                "src": "5100:10:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                                    "typeString": "mapping(bytes32 => bool)"
                                                }
                                            },
                                            "id": 4915,
                                            "indexExpression": {
                                                "id": 4914,
                                                "name": "requestTypehash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4905,
                                                "src": "5111:15:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "5100:27:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "74727565",
                                            "id": 4916,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "bool",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "5130:4:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "value": "true"
                                        },
                                        "src": "5100:34:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 4918,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5100:34:8"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 4920,
                                                "name": "requestTypehash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4905,
                                                "src": "5171:15:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 4921,
                                                "name": "requestType",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4901,
                                                "src": "5188:11:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 4919,
                                            "name": "RequestTypeRegistered",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5070,
                                            "src": "5149:21:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes32,string memory)"
                                            }
                                        },
                                        "id": 4922,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5149:51:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4923,
                                    "nodeType": "EmitStatement",
                                    "src": "5144:56:8"
                                }
                            ]
                        },
                        "id": 4925,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "registerRequestTypeInternal",
                        "nameLocation": "4960:27:8",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4902,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4901,
                                    "mutability": "mutable",
                                    "name": "requestType",
                                    "nameLocation": "5002:11:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4925,
                                    "src": "4988:25:8",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 4900,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4988:6:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4987:27:8"
                        },
                        "returnParameters": {
                            "id": 4903,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5024:0:8"
                        },
                        "scope": 5036,
                        "src": "4951:256:8",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 4986,
                            "nodeType": "Block",
                            "src": "5438:508:8",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "baseExpression": {
                                                    "id": 4940,
                                                    "name": "domains",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4498,
                                                    "src": "5456:7:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                                        "typeString": "mapping(bytes32 => bool)"
                                                    }
                                                },
                                                "id": 4942,
                                                "indexExpression": {
                                                    "id": 4941,
                                                    "name": "domainSeparator",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4930,
                                                    "src": "5464:15:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "5456:24:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4657443a20756e7265676973746572656420646f6d61696e207365702e",
                                                "id": 4943,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5482:31:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_ca4cbe853eb8d1d70a796ee3c3ab90e44cfde7370b3c6b6e831ba82e4c462422",
                                                    "typeString": "literal_string \"FWD: unregistered domain sep.\""
                                                },
                                                "value": "FWD: unregistered domain sep."
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_ca4cbe853eb8d1d70a796ee3c3ab90e44cfde7370b3c6b6e831ba82e4c462422",
                                                    "typeString": "literal_string \"FWD: unregistered domain sep.\""
                                                }
                                            ],
                                            "id": 4939,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5448:7:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4944,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5448:66:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4945,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5448:66:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "baseExpression": {
                                                    "id": 4947,
                                                    "name": "typeHashes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4494,
                                                    "src": "5532:10:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                                        "typeString": "mapping(bytes32 => bool)"
                                                    }
                                                },
                                                "id": 4949,
                                                "indexExpression": {
                                                    "id": 4948,
                                                    "name": "requestTypeHash",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4932,
                                                    "src": "5543:15:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "5532:27:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4657443a20756e72656769737465726564207479706568617368",
                                                "id": 4950,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5561:28:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_f721acda6e6b2b13f902afdb9b85b2b8143482ec73725549e81f9793051e7c26",
                                                    "typeString": "literal_string \"FWD: unregistered typehash\""
                                                },
                                                "value": "FWD: unregistered typehash"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_f721acda6e6b2b13f902afdb9b85b2b8143482ec73725549e81f9793051e7c26",
                                                    "typeString": "literal_string \"FWD: unregistered typehash\""
                                                }
                                            ],
                                            "id": 4946,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5524:7:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4951,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5524:66:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4952,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5524:66:8"
                                },
                                {
                                    "assignments": [
                                        4954
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4954,
                                            "mutability": "mutable",
                                            "name": "digest",
                                            "nameLocation": "5608:6:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4986,
                                            "src": "5600:14:8",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            },
                                            "typeName": {
                                                "id": 4953,
                                                "name": "bytes32",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5600:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4969,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "hexValue": "1901",
                                                        "id": 4958,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "5661:10:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                                                            "typeString": "literal_string hex\"1901\""
                                                        },
                                                        "value": "\u0019\u0001"
                                                    },
                                                    {
                                                        "id": 4959,
                                                        "name": "domainSeparator",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4930,
                                                        "src": "5673:15:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    },
                                                    {
                                                        "arguments": [
                                                            {
                                                                "arguments": [
                                                                    {
                                                                        "id": 4962,
                                                                        "name": "req",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 4928,
                                                                        "src": "5728:3:8",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                            "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                        }
                                                                    },
                                                                    {
                                                                        "id": 4963,
                                                                        "name": "requestTypeHash",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 4932,
                                                                        "src": "5733:15:8",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_bytes32",
                                                                            "typeString": "bytes32"
                                                                        }
                                                                    },
                                                                    {
                                                                        "id": 4964,
                                                                        "name": "suffixData",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 4934,
                                                                        "src": "5750:10:8",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                                            "typeString": "bytes calldata"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                            "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                        },
                                                                        {
                                                                            "typeIdentifier": "t_bytes32",
                                                                            "typeString": "bytes32"
                                                                        },
                                                                        {
                                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                                            "typeString": "bytes calldata"
                                                                        }
                                                                    ],
                                                                    "id": 4961,
                                                                    "name": "_getEncoded",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 5035,
                                                                    "src": "5716:11:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_internal_pure$_t_struct$_ForwardRequest_$5058_calldata_ptr_$_t_bytes32_$_t_bytes_calldata_ptr_$returns$_t_bytes_memory_ptr_$",
                                                                        "typeString": "function (struct IForwarder.ForwardRequest calldata,bytes32,bytes calldata) pure returns (bytes memory)"
                                                                    }
                                                                },
                                                                "id": 4965,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "5716:45:8",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            ],
                                                            "id": 4960,
                                                            "name": "keccak256",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967288,
                                                            "src": "5706:9:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                                            }
                                                        },
                                                        "id": 4966,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "5706:56:8",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                                                            "typeString": "literal_string hex\"1901\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 4956,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "5627:3:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 4957,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "src": "5627:16:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 4967,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "5627:149:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 4955,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967288,
                                            "src": "5617:9:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 4968,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5617:160:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5600:177:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 4982,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    },
                                                    "id": 4974,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "id": 4971,
                                                            "name": "tx",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967270,
                                                            "src": "5848:2:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_transaction",
                                                                "typeString": "tx"
                                                            }
                                                        },
                                                        "id": 4972,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "origin",
                                                        "nodeType": "MemberAccess",
                                                        "src": "5848:9:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "==",
                                                    "rightExpression": {
                                                        "id": 4973,
                                                        "name": "DRY_RUN_ADDRESS",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4484,
                                                        "src": "5861:15:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "src": "5848:28:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "||",
                                                "rightExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    },
                                                    "id": 4981,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "arguments": [
                                                            {
                                                                "id": 4977,
                                                                "name": "sig",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4936,
                                                                "src": "5895:3:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                                    "typeString": "bytes calldata"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                                    "typeString": "bytes calldata"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "id": 4975,
                                                                "name": "digest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4954,
                                                                "src": "5880:6:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes32",
                                                                    "typeString": "bytes32"
                                                                }
                                                            },
                                                            "id": 4976,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "recover",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 11871,
                                                            "src": "5880:14:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                                                                "typeString": "function (bytes32,bytes memory) pure returns (address)"
                                                            }
                                                        },
                                                        "id": 4978,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "5880:19:8",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "==",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 4979,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4928,
                                                            "src": "5903:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 4980,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "from",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5045,
                                                        "src": "5903:8:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "src": "5880:31:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "5848:63:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4657443a207369676e6174757265206d69736d61746368",
                                                "id": 4983,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5913:25:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_a309cac733f4697166c19648d49cb610f9d6044ca84e2283a12d8c0e1af506c4",
                                                    "typeString": "literal_string \"FWD: signature mismatch\""
                                                },
                                                "value": "FWD: signature mismatch"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_a309cac733f4697166c19648d49cb610f9d6044ca84e2283a12d8c0e1af506c4",
                                                    "typeString": "literal_string \"FWD: signature mismatch\""
                                                }
                                            ],
                                            "id": 4970,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5840:7:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4984,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5840:99:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4985,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5840:99:8"
                                }
                            ]
                        },
                        "id": 4987,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifySig",
                        "nameLocation": "5222:10:8",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4937,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4928,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nameLocation": "5266:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4987,
                                    "src": "5242:27:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "id": 4927,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4926,
                                            "name": "ForwardRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5058,
                                            "src": "5242:14:8"
                                        },
                                        "referencedDeclaration": 5058,
                                        "src": "5242:14:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4930,
                                    "mutability": "mutable",
                                    "name": "domainSeparator",
                                    "nameLocation": "5287:15:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4987,
                                    "src": "5279:23:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 4929,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5279:7:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4932,
                                    "mutability": "mutable",
                                    "name": "requestTypeHash",
                                    "nameLocation": "5320:15:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4987,
                                    "src": "5312:23:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 4931,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5312:7:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4934,
                                    "mutability": "mutable",
                                    "name": "suffixData",
                                    "nameLocation": "5360:10:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4987,
                                    "src": "5345:25:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4933,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5345:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4936,
                                    "mutability": "mutable",
                                    "name": "sig",
                                    "nameLocation": "5395:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4987,
                                    "src": "5380:18:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4935,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5380:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5232:167:8"
                        },
                        "returnParameters": {
                            "id": 4938,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5438:0:8"
                        },
                        "scope": 5036,
                        "src": "5213:733:8",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 5034,
                            "nodeType": "Block",
                            "src": "6281:536:8",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 5002,
                                                "name": "requestTypeHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4993,
                                                "src": "6551:15:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "expression": {
                                                                    "id": 5007,
                                                                    "name": "req",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4991,
                                                                    "src": "6596:3:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                    }
                                                                },
                                                                "id": 5008,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "from",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 5045,
                                                                "src": "6596:8:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            ],
                                                            "id": 5006,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "6588:7:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_uint160_$",
                                                                "typeString": "type(uint160)"
                                                            },
                                                            "typeName": {
                                                                "id": 5005,
                                                                "name": "uint160",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "6588:7:8",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 5009,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "6588:17:8",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint160",
                                                            "typeString": "uint160"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint160",
                                                            "typeString": "uint160"
                                                        }
                                                    ],
                                                    "id": 5004,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "6580:7:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_uint256_$",
                                                        "typeString": "type(uint256)"
                                                    },
                                                    "typeName": {
                                                        "id": 5003,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "6580:7:8",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 5010,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6580:26:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "expression": {
                                                                    "id": 5015,
                                                                    "name": "req",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4991,
                                                                    "src": "6636:3:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                    }
                                                                },
                                                                "id": 5016,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "to",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 5047,
                                                                "src": "6636:6:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            ],
                                                            "id": 5014,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "6628:7:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_uint160_$",
                                                                "typeString": "type(uint160)"
                                                            },
                                                            "typeName": {
                                                                "id": 5013,
                                                                "name": "uint160",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "6628:7:8",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 5017,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "6628:15:8",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint160",
                                                            "typeString": "uint160"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint160",
                                                            "typeString": "uint160"
                                                        }
                                                    ],
                                                    "id": 5012,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "6620:7:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_uint256_$",
                                                        "typeString": "type(uint256)"
                                                    },
                                                    "typeName": {
                                                        "id": 5011,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "6620:7:8",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 5018,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6620:24:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 5019,
                                                    "name": "req",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4991,
                                                    "src": "6658:3:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 5020,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "value",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5049,
                                                "src": "6658:9:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 5021,
                                                    "name": "req",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4991,
                                                    "src": "6681:3:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 5022,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "gas",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5051,
                                                "src": "6681:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 5023,
                                                    "name": "req",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4991,
                                                    "src": "6702:3:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 5024,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "nonce",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5053,
                                                "src": "6702:9:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "id": 5026,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4991,
                                                            "src": "6735:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 5027,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "data",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5055,
                                                        "src": "6735:8:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    ],
                                                    "id": 5025,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967288,
                                                    "src": "6725:9:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 5028,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6725:19:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 5029,
                                                    "name": "req",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4991,
                                                    "src": "6758:3:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 5030,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "validUntilTime",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5057,
                                                "src": "6758:18:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "id": 5031,
                                                "name": "suffixData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4995,
                                                "src": "6790:10:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "expression": {
                                                "id": 5000,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967295,
                                                "src": "6521:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 5001,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encodePacked",
                                            "nodeType": "MemberAccess",
                                            "src": "6521:16:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 5032,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6521:289:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 4999,
                                    "id": 5033,
                                    "nodeType": "Return",
                                    "src": "6514:296:8"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4988,
                            "nodeType": "StructuredDocumentation",
                            "src": "5952:131:8",
                            "text": " @notice Creates a byte array that is a valid ABI encoding of a request of a `RequestType` type. See `execute()`."
                        },
                        "functionSelector": "e2b62f2d",
                        "id": 5035,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_getEncoded",
                        "nameLocation": "6097:11:8",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4996,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4991,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nameLocation": "6142:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5035,
                                    "src": "6118:27:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "id": 4990,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4989,
                                            "name": "ForwardRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5058,
                                            "src": "6118:14:8"
                                        },
                                        "referencedDeclaration": 5058,
                                        "src": "6118:14:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4993,
                                    "mutability": "mutable",
                                    "name": "requestTypeHash",
                                    "nameLocation": "6163:15:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5035,
                                    "src": "6155:23:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 4992,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6155:7:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4995,
                                    "mutability": "mutable",
                                    "name": "suffixData",
                                    "nameLocation": "6203:10:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5035,
                                    "src": "6188:25:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4994,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6188:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6108:111:8"
                        },
                        "returnParameters": {
                            "id": 4999,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4998,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5035,
                                    "src": "6262:12:8",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4997,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6262:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6252:28:8"
                        },
                        "scope": 5036,
                        "src": "6088:729:8",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "public"
                    }
                ],
                "scope": 5037,
                "src": "479:6340:8",
                "usedErrors": []
            }
        ],
        "src": "0:6819:8"
    },
    "legacyAST": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/forwarder/Forwarder.sol",
        "exportedSymbols": {
            "ECDSA": [
                12122
            ],
            "ERC165": [
                12146
            ],
            "Forwarder": [
                5036
            ],
            "IERC165": [
                12352
            ],
            "IForwarder": [
                5129
            ],
            "Strings": [
                11734
            ],
            "console": [
                20920
            ]
        },
        "id": 5037,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 4468,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:8"
            },
            {
                "id": 4469,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "24:19:8"
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
                "file": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
                "id": 4470,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 5037,
                "sourceUnit": 12123,
                "src": "123:62:8",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
                "file": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
                "id": 4471,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 5037,
                "sourceUnit": 12147,
                "src": "186:64:8",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "hardhat/console.sol",
                "file": "hardhat/console.sol",
                "id": 4472,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 5037,
                "sourceUnit": 20921,
                "src": "252:29:8",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/forwarder/IForwarder.sol",
                "file": "./IForwarder.sol",
                "id": 4473,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 5037,
                "sourceUnit": 5130,
                "src": "283:26:8",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 4475,
                            "name": "IForwarder",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 5129,
                            "src": "501:10:8"
                        },
                        "id": 4476,
                        "nodeType": "InheritanceSpecifier",
                        "src": "501:10:8"
                    },
                    {
                        "baseName": {
                            "id": 4477,
                            "name": "ERC165",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12146,
                            "src": "513:6:8"
                        },
                        "id": 4478,
                        "nodeType": "InheritanceSpecifier",
                        "src": "513:6:8"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "documentation": {
                    "id": 4474,
                    "nodeType": "StructuredDocumentation",
                    "src": "311:167:8",
                    "text": " @title The Forwarder Implementation\n @notice This implementation of the `IForwarder` interface uses ERC-712 signatures and stored nonces for verification."
                },
                "fullyImplemented": true,
                "id": 5036,
                "linearizedBaseContracts": [
                    5036,
                    12146,
                    5129,
                    12352
                ],
                "name": "Forwarder",
                "nameLocation": "488:9:8",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 4481,
                        "libraryName": {
                            "id": 4479,
                            "name": "ECDSA",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12122,
                            "src": "532:5:8"
                        },
                        "nodeType": "UsingForDirective",
                        "src": "526:24:8",
                        "typeName": {
                            "id": 4480,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "542:7:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                            }
                        }
                    },
                    {
                        "constant": true,
                        "id": 4484,
                        "mutability": "constant",
                        "name": "DRY_RUN_ADDRESS",
                        "nameLocation": "581:15:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 5036,
                        "src": "556:85:8",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                        },
                        "typeName": {
                            "id": 4482,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "556:7:8",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        },
                        "value": {
                            "hexValue": "307830303030303030303030303030303030303030303030303030303030303030303030303030303030",
                            "id": 4483,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "599:42:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            },
                            "value": "0x0000000000000000000000000000000000000000"
                        },
                        "visibility": "private"
                    },
                    {
                        "constant": true,
                        "functionSelector": "066a310c",
                        "id": 4487,
                        "mutability": "constant",
                        "name": "GENERIC_PARAMS",
                        "nameLocation": "671:14:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 5036,
                        "src": "648:139:8",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 4485,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "648:6:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "value": {
                            "hexValue": "616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c627974657320646174612c75696e743235362076616c6964556e74696c54696d65",
                            "id": 4486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "688:99:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_33f12fe95872be7be9c474c0e99a56a1b0cad386a14d26df2bb11622e5368f9b",
                                "typeString": "literal_string \"address from,address to,uint256 value,uint256 gas,uint256 nonce,bytes data,uint256 validUntilTime\""
                            },
                            "value": "address from,address to,uint256 value,uint256 gas,uint256 nonce,bytes data,uint256 validUntilTime"
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": true,
                        "functionSelector": "c3f28abd",
                        "id": 4490,
                        "mutability": "constant",
                        "name": "EIP712_DOMAIN_TYPE",
                        "nameLocation": "817:18:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 5036,
                        "src": "794:128:8",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 4488,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "794:6:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "value": {
                            "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429",
                            "id": 4489,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "838:84:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f",
                                "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""
                            },
                            "value": "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "21fe98df",
                        "id": 4494,
                        "mutability": "mutable",
                        "name": "typeHashes",
                        "nameLocation": "961:10:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 5036,
                        "src": "929:42:8",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                            "typeString": "mapping(bytes32 => bool)"
                        },
                        "typeName": {
                            "id": 4493,
                            "keyType": {
                                "id": 4491,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "937:7:8",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "929:24:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                "typeString": "mapping(bytes32 => bool)"
                            },
                            "valueType": {
                                "id": 4492,
                                "name": "bool",
                                "nodeType": "ElementaryTypeName",
                                "src": "948:4:8",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                }
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "c722f177",
                        "id": 4498,
                        "mutability": "mutable",
                        "name": "domains",
                        "nameLocation": "1009:7:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 5036,
                        "src": "977:39:8",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                            "typeString": "mapping(bytes32 => bool)"
                        },
                        "typeName": {
                            "id": 4497,
                            "keyType": {
                                "id": 4495,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "985:7:8",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "977:24:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                "typeString": "mapping(bytes32 => bool)"
                            },
                            "valueType": {
                                "id": 4496,
                                "name": "bool",
                                "nodeType": "ElementaryTypeName",
                                "src": "996:4:8",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                }
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 4502,
                        "mutability": "mutable",
                        "name": "nonces",
                        "nameLocation": "1116:6:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 5036,
                        "src": "1080:42:8",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                            "id": 4501,
                            "keyType": {
                                "id": 4499,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1088:7:8",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "1080:27:8",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                            },
                            "valueType": {
                                "id": 4500,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1099:7:8",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "visibility": "private"
                    },
                    {
                        "body": {
                            "id": 4505,
                            "nodeType": "Block",
                            "src": "1205:2:8",
                            "statements": []
                        },
                        "id": 4506,
                        "implemented": true,
                        "kind": "receive",
                        "modifiers": [],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4503,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1185:2:8"
                        },
                        "returnParameters": {
                            "id": 4504,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1205:0:8"
                        },
                        "scope": 5036,
                        "src": "1178:29:8",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5078
                        ],
                        "body": {
                            "id": 4519,
                            "nodeType": "Block",
                            "src": "1323:36:8",
                            "statements": [
                                {
                                    "expression": {
                                        "baseExpression": {
                                            "id": 4515,
                                            "name": "nonces",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4502,
                                            "src": "1340:6:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 4517,
                                        "indexExpression": {
                                            "id": 4516,
                                            "name": "from",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4509,
                                            "src": "1347:4:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "1340:12:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 4514,
                                    "id": 4518,
                                    "nodeType": "Return",
                                    "src": "1333:19:8"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4507,
                            "nodeType": "StructuredDocumentation",
                            "src": "1213:26:8",
                            "text": "@inheritdoc IForwarder"
                        },
                        "functionSelector": "2d0335ab",
                        "id": 4520,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getNonce",
                        "nameLocation": "1253:8:8",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4511,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1292:8:8"
                        },
                        "parameters": {
                            "id": 4510,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4509,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nameLocation": "1270:4:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4520,
                                    "src": "1262:12:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4508,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1262:7:8",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1261:14:8"
                        },
                        "returnParameters": {
                            "id": 4514,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4513,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4520,
                                    "src": "1314:7:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4512,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1314:7:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1313:9:8"
                        },
                        "scope": 5036,
                        "src": "1244:115:8",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 4539,
                            "nodeType": "Block",
                            "src": "1379:159:8",
                            "statements": [
                                {
                                    "assignments": [
                                        4524
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4524,
                                            "mutability": "mutable",
                                            "name": "requestType",
                                            "nameLocation": "1403:11:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4539,
                                            "src": "1389:25:8",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string"
                                            },
                                            "typeName": {
                                                "id": 4523,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1389:6:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_storage_ptr",
                                                    "typeString": "string"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4534,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "hexValue": "466f72776172645265717565737428",
                                                        "id": 4529,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "1441:17:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_02400580691f62fd612767b414e7b88f024d8265e514f15245995a20cf0d8379",
                                                            "typeString": "literal_string \"ForwardRequest(\""
                                                        },
                                                        "value": "ForwardRequest("
                                                    },
                                                    {
                                                        "id": 4530,
                                                        "name": "GENERIC_PARAMS",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4487,
                                                        "src": "1460:14:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    },
                                                    {
                                                        "hexValue": "29",
                                                        "id": 4531,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "1476:3:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_59d76dc3b33357eda30db1508968fbb18f21b9cd2442f1559b20154ddaa4d7ed",
                                                            "typeString": "literal_string \")\""
                                                        },
                                                        "value": ")"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_stringliteral_02400580691f62fd612767b414e7b88f024d8265e514f15245995a20cf0d8379",
                                                            "typeString": "literal_string \"ForwardRequest(\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_stringliteral_59d76dc3b33357eda30db1508968fbb18f21b9cd2442f1559b20154ddaa4d7ed",
                                                            "typeString": "literal_string \")\""
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 4527,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "1424:3:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 4528,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "src": "1424:16:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 4532,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1424:56:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 4526,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "1417:6:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                                "typeString": "type(string storage pointer)"
                                            },
                                            "typeName": {
                                                "id": 4525,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1417:6:8",
                                                "typeDescriptions": {}
                                            }
                                        },
                                        "id": 4533,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1417:64:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "1389:92:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4536,
                                                "name": "requestType",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4524,
                                                "src": "1519:11:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 4535,
                                            "name": "registerRequestTypeInternal",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4925,
                                            "src": "1491:27:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory)"
                                            }
                                        },
                                        "id": 4537,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1491:40:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4538,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1491:40:8"
                                }
                            ]
                        },
                        "id": 4540,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4521,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1376:2:8"
                        },
                        "returnParameters": {
                            "id": 4522,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1379:0:8"
                        },
                        "scope": 5036,
                        "src": "1365:173:8",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            12145,
                            12351
                        ],
                        "body": {
                            "id": 4563,
                            "nodeType": "Block",
                            "src": "1680:119:8",
                            "statements": [
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 4561,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                            },
                                            "id": 4556,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "id": 4551,
                                                "name": "interfaceId",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4543,
                                                "src": "1697:11:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "==",
                                            "rightExpression": {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "id": 4553,
                                                            "name": "IForwarder",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5129,
                                                            "src": "1717:10:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IForwarder_$5129_$",
                                                                "typeString": "type(contract IForwarder)"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_type$_t_contract$_IForwarder_$5129_$",
                                                                "typeString": "type(contract IForwarder)"
                                                            }
                                                        ],
                                                        "id": 4552,
                                                        "name": "type",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967269,
                                                        "src": "1712:4:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                            "typeString": "function () pure"
                                                        }
                                                    },
                                                    "id": 4554,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1712:16:8",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_meta_type_t_contract$_IForwarder_$5129",
                                                        "typeString": "type(contract IForwarder)"
                                                    }
                                                },
                                                "id": 4555,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "interfaceId",
                                                "nodeType": "MemberAccess",
                                                "src": "1712:28:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            },
                                            "src": "1697:43:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "||",
                                        "rightExpression": {
                                            "arguments": [
                                                {
                                                    "id": 4559,
                                                    "name": "interfaceId",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4543,
                                                    "src": "1780:11:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 4557,
                                                    "name": "super",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967271,
                                                    "src": "1756:5:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_super$_Forwarder_$5036_$",
                                                        "typeString": "type(contract super Forwarder)"
                                                    }
                                                },
                                                "id": 4558,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "supportsInterface",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 12145,
                                                "src": "1756:23:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                                    "typeString": "function (bytes4) view returns (bool)"
                                                }
                                            },
                                            "id": 4560,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1756:36:8",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "1697:95:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 4550,
                                    "id": 4562,
                                    "nodeType": "Return",
                                    "src": "1690:102:8"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4541,
                            "nodeType": "StructuredDocumentation",
                            "src": "1544:23:8",
                            "text": "@inheritdoc IERC165"
                        },
                        "functionSelector": "01ffc9a7",
                        "id": 4564,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "supportsInterface",
                        "nameLocation": "1581:17:8",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4547,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [
                                {
                                    "id": 4545,
                                    "name": "IERC165",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 12352,
                                    "src": "1648:7:8"
                                },
                                {
                                    "id": 4546,
                                    "name": "ERC165",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 12146,
                                    "src": "1657:6:8"
                                }
                            ],
                            "src": "1639:25:8"
                        },
                        "parameters": {
                            "id": 4544,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4543,
                                    "mutability": "mutable",
                                    "name": "interfaceId",
                                    "nameLocation": "1606:11:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4564,
                                    "src": "1599:18:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    },
                                    "typeName": {
                                        "id": 4542,
                                        "name": "bytes4",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1599:6:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1598:20:8"
                        },
                        "returnParameters": {
                            "id": 4550,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4549,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4564,
                                    "src": "1674:4:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 4548,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1674:4:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1673:6:8"
                        },
                        "scope": 5036,
                        "src": "1572:227:8",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5093
                        ],
                        "body": {
                            "id": 4592,
                            "nodeType": "Block",
                            "src": "2046:110:8",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4581,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4568,
                                                "src": "2069:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                }
                                            ],
                                            "id": 4580,
                                            "name": "_verifyNonce",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4756,
                                            "src": "2056:12:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_struct$_ForwardRequest_$5058_calldata_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest calldata) view"
                                            }
                                        },
                                        "id": 4582,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2056:17:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4583,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2056:17:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4585,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4568,
                                                "src": "2094:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                }
                                            },
                                            {
                                                "id": 4586,
                                                "name": "domainSeparator",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4570,
                                                "src": "2099:15:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 4587,
                                                "name": "requestTypeHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4572,
                                                "src": "2116:15:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 4588,
                                                "name": "suffixData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4574,
                                                "src": "2133:10:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 4589,
                                                "name": "sig",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4576,
                                                "src": "2145:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "id": 4584,
                                            "name": "_verifySig",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4987,
                                            "src": "2083:10:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_struct$_ForwardRequest_$5058_calldata_ptr_$_t_bytes32_$_t_bytes32_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest calldata,bytes32,bytes32,bytes calldata,bytes calldata) view"
                                            }
                                        },
                                        "id": 4590,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2083:66:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4591,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2083:66:8"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4565,
                            "nodeType": "StructuredDocumentation",
                            "src": "1805:26:8",
                            "text": "@inheritdoc IForwarder"
                        },
                        "functionSelector": "ad9f99c7",
                        "id": 4593,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "verify",
                        "nameLocation": "1845:6:8",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4578,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2032:8:8"
                        },
                        "parameters": {
                            "id": 4577,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4568,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nameLocation": "1885:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4593,
                                    "src": "1861:27:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "id": 4567,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4566,
                                            "name": "ForwardRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5058,
                                            "src": "1861:14:8"
                                        },
                                        "referencedDeclaration": 5058,
                                        "src": "1861:14:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4570,
                                    "mutability": "mutable",
                                    "name": "domainSeparator",
                                    "nameLocation": "1906:15:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4593,
                                    "src": "1898:23:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 4569,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1898:7:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4572,
                                    "mutability": "mutable",
                                    "name": "requestTypeHash",
                                    "nameLocation": "1939:15:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4593,
                                    "src": "1931:23:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 4571,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1931:7:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4574,
                                    "mutability": "mutable",
                                    "name": "suffixData",
                                    "nameLocation": "1979:10:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4593,
                                    "src": "1964:25:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4573,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1964:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4576,
                                    "mutability": "mutable",
                                    "name": "sig",
                                    "nameLocation": "2014:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4593,
                                    "src": "1999:18:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4575,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1999:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1851:167:8"
                        },
                        "returnParameters": {
                            "id": 4579,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2046:0:8"
                        },
                        "scope": 5036,
                        "src": "1836:320:8",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5112
                        ],
                        "body": {
                            "id": 4737,
                            "nodeType": "Block",
                            "src": "2461:1052:8",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4614,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4597,
                                                "src": "2482:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                }
                                            },
                                            {
                                                "id": 4615,
                                                "name": "domainSeparator",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4599,
                                                "src": "2487:15:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 4616,
                                                "name": "requestTypeHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4601,
                                                "src": "2504:15:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 4617,
                                                "name": "suffixData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4603,
                                                "src": "2521:10:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 4618,
                                                "name": "sig",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4605,
                                                "src": "2533:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "id": 4613,
                                            "name": "_verifySig",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4987,
                                            "src": "2471:10:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_struct$_ForwardRequest_$5058_calldata_ptr_$_t_bytes32_$_t_bytes32_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest calldata,bytes32,bytes32,bytes calldata,bytes calldata) view"
                                            }
                                        },
                                        "id": 4619,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2471:66:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4620,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2471:66:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4622,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4597,
                                                "src": "2569:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                }
                                            ],
                                            "id": 4621,
                                            "name": "_verifyAndUpdateNonce",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4775,
                                            "src": "2547:21:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_ForwardRequest_$5058_calldata_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest calldata)"
                                            }
                                        },
                                        "id": 4623,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2547:26:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4624,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2547:26:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 4635,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 4629,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "id": 4626,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4597,
                                                            "src": "2592:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 4627,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "validUntilTime",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5057,
                                                        "src": "2592:18:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "==",
                                                    "rightExpression": {
                                                        "hexValue": "30",
                                                        "id": 4628,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "2614:1:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    },
                                                    "src": "2592:23:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "||",
                                                "rightExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 4634,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "id": 4630,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4597,
                                                            "src": "2619:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 4631,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "validUntilTime",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5057,
                                                        "src": "2619:18:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": ">",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 4632,
                                                            "name": "block",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967292,
                                                            "src": "2640:5:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_block",
                                                                "typeString": "block"
                                                            }
                                                        },
                                                        "id": 4633,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "timestamp",
                                                        "nodeType": "MemberAccess",
                                                        "src": "2640:15:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "2619:36:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "2592:63:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4657443a20726571756573742065787069726564",
                                                "id": 4636,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2657:22:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_ab154ef4311c2ad00e291c382ac923b2a662954ff9fe757e2f5b71d1333fbc84",
                                                    "typeString": "literal_string \"FWD: request expired\""
                                                },
                                                "value": "FWD: request expired"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_ab154ef4311c2ad00e291c382ac923b2a662954ff9fe757e2f5b71d1333fbc84",
                                                    "typeString": "literal_string \"FWD: request expired\""
                                                }
                                            ],
                                            "id": 4625,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2584:7:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4637,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2584:96:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4638,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2584:96:8"
                                },
                                {
                                    "assignments": [
                                        4640
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4640,
                                            "mutability": "mutable",
                                            "name": "gasForTransfer",
                                            "nameLocation": "2699:14:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4737,
                                            "src": "2691:22:8",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 4639,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2691:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4642,
                                    "initialValue": {
                                        "hexValue": "30",
                                        "id": 4641,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "2716:1:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2691:26:8"
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 4646,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 4643,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4597,
                                                "src": "2732:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                }
                                            },
                                            "id": 4644,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "value",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5049,
                                            "src": "2732:9:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "!=",
                                        "rightExpression": {
                                            "hexValue": "30",
                                            "id": 4645,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "2745:1:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "2732:14:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 4652,
                                    "nodeType": "IfStatement",
                                    "src": "2727:129:8",
                                    "trueBody": {
                                        "id": 4651,
                                        "nodeType": "Block",
                                        "src": "2749:107:8",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "id": 4649,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "id": 4647,
                                                        "name": "gasForTransfer",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4640,
                                                        "src": "2763:14:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "hexValue": "3430303030",
                                                        "id": 4648,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "2780:5:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_40000_by_1",
                                                            "typeString": "int_const 40000"
                                                        },
                                                        "value": "40000"
                                                    },
                                                    "src": "2763:22:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 4650,
                                                "nodeType": "ExpressionStatement",
                                                "src": "2763:22:8"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "assignments": [
                                        4654
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4654,
                                            "mutability": "mutable",
                                            "name": "callData",
                                            "nameLocation": "2878:8:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4737,
                                            "src": "2865:21:8",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 4653,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2865:5:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4662,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 4657,
                                                    "name": "req",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4597,
                                                    "src": "2906:3:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 4658,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "data",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5055,
                                                "src": "2906:8:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 4659,
                                                    "name": "req",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4597,
                                                    "src": "2916:3:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 4660,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "from",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5045,
                                                "src": "2916:8:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 4655,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967295,
                                                "src": "2889:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 4656,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encodePacked",
                                            "nodeType": "MemberAccess",
                                            "src": "2889:16:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 4661,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2889:36:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2865:60:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4674,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 4669,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 4667,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "arguments": [],
                                                            "expression": {
                                                                "argumentTypes": [],
                                                                "id": 4664,
                                                                "name": "gasleft",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4294967289,
                                                                "src": "2943:7:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                                    "typeString": "function () view returns (uint256)"
                                                                }
                                                            },
                                                            "id": 4665,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "2943:9:8",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "*",
                                                        "rightExpression": {
                                                            "hexValue": "3633",
                                                            "id": 4666,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "2953:2:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_63_by_1",
                                                                "typeString": "int_const 63"
                                                            },
                                                            "value": "63"
                                                        },
                                                        "src": "2943:12:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "/",
                                                    "rightExpression": {
                                                        "hexValue": "3634",
                                                        "id": 4668,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "2956:2:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_64_by_1",
                                                            "typeString": "int_const 64"
                                                        },
                                                        "value": "64"
                                                    },
                                                    "src": "2943:15:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 4673,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "id": 4670,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4597,
                                                            "src": "2962:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 4671,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gas",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5051,
                                                        "src": "2962:7:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "id": 4672,
                                                        "name": "gasForTransfer",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4640,
                                                        "src": "2972:14:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "2962:24:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "2943:43:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4657443a20696e73756666696369656e7420676173",
                                                "id": 4675,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2988:23:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_aa54c663771d7d8513fcfc47d540cac7797a601046192d773181437760454721",
                                                    "typeString": "literal_string \"FWD: insufficient gas\""
                                                },
                                                "value": "FWD: insufficient gas"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_aa54c663771d7d8513fcfc47d540cac7797a601046192d773181437760454721",
                                                    "typeString": "literal_string \"FWD: insufficient gas\""
                                                }
                                            ],
                                            "id": 4663,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2935:7:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4676,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2935:77:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4677,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2935:77:8"
                                },
                                {
                                    "expression": {
                                        "id": 4691,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "components": [
                                                {
                                                    "id": 4678,
                                                    "name": "success",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4609,
                                                    "src": "3082:7:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                {
                                                    "id": 4679,
                                                    "name": "ret",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4611,
                                                    "src": "3090:3:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                }
                                            ],
                                            "id": 4680,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "TupleExpression",
                                            "src": "3081:13:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                "typeString": "tuple(bool,bytes memory)"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "id": 4689,
                                                    "name": "callData",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4654,
                                                    "src": "3143:8:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "expression": {
                                                            "id": 4681,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4597,
                                                            "src": "3097:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 4682,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "to",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5047,
                                                        "src": "3097:6:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "id": 4683,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "call",
                                                    "nodeType": "MemberAccess",
                                                    "src": "3097:11:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                    }
                                                },
                                                "id": 4688,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "names": [
                                                    "gas",
                                                    "value"
                                                ],
                                                "nodeType": "FunctionCallOptions",
                                                "options": [
                                                    {
                                                        "expression": {
                                                            "id": 4684,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4597,
                                                            "src": "3115:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 4685,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gas",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5051,
                                                        "src": "3115:7:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "expression": {
                                                            "id": 4686,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4597,
                                                            "src": "3132:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 4687,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "value",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5049,
                                                        "src": "3132:9:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "src": "3097:45:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gasvalue",
                                                    "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                }
                                            },
                                            "id": 4690,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3097:55:8",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                "typeString": "tuple(bool,bytes memory)"
                                            }
                                        },
                                        "src": "3081:71:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4692,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3081:71:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "6578656375746520726573756c743a20737563636573733a202573207265743a",
                                                "id": 4696,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3175:34:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_7834b284c5714d55c832c27bef2bd1b2419dab4984436cf16c324585d607d178",
                                                    "typeString": "literal_string \"execute result: success: %s ret:\""
                                                },
                                                "value": "execute result: success: %s ret:"
                                            },
                                            {
                                                "id": 4697,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4609,
                                                "src": "3211:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_7834b284c5714d55c832c27bef2bd1b2419dab4984436cf16c324585d607d178",
                                                    "typeString": "literal_string \"execute result: success: %s ret:\""
                                                },
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            ],
                                            "expression": {
                                                "id": 4693,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "3163:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 4695,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13598,
                                            "src": "3163:11:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_bool_$returns$__$",
                                                "typeString": "function (string memory,bool) view"
                                            }
                                        },
                                        "id": 4698,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3163:56:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4699,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3163:56:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4703,
                                                "name": "ret",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4611,
                                                "src": "3246:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "id": 4700,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "3229:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 4702,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "logBytes",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12975,
                                            "src": "3229:16:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes memory) view"
                                            }
                                        },
                                        "id": 4704,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3229:21:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4705,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3229:21:8"
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 4717,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 4709,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "id": 4706,
                                                    "name": "req",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4597,
                                                    "src": "3266:3:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 4707,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "value",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5049,
                                                "src": "3266:9:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "!=",
                                            "rightExpression": {
                                                "hexValue": "30",
                                                "id": 4708,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3279:1:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            "src": "3266:14:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 4716,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "id": 4712,
                                                            "name": "this",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967268,
                                                            "src": "3292:4:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_Forwarder_$5036",
                                                                "typeString": "contract Forwarder"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_contract$_Forwarder_$5036",
                                                                "typeString": "contract Forwarder"
                                                            }
                                                        ],
                                                        "id": 4711,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "3284:7:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 4710,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3284:7:8",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 4713,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3284:13:8",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "id": 4714,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "balance",
                                                "nodeType": "MemberAccess",
                                                "src": "3284:21:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": ">",
                                            "rightExpression": {
                                                "hexValue": "30",
                                                "id": 4715,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3306:1:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            "src": "3284:23:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "3266:41:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 4732,
                                    "nodeType": "IfStatement",
                                    "src": "3261:215:8",
                                    "trueBody": {
                                        "id": 4731,
                                        "nodeType": "Block",
                                        "src": "3310:166:8",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "expression": {
                                                                "arguments": [
                                                                    {
                                                                        "id": 4726,
                                                                        "name": "this",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 4294967268,
                                                                        "src": "3451:4:8",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_contract$_Forwarder_$5036",
                                                                            "typeString": "contract Forwarder"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_contract$_Forwarder_$5036",
                                                                            "typeString": "contract Forwarder"
                                                                        }
                                                                    ],
                                                                    "id": 4725,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "3443:7:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_address_$",
                                                                        "typeString": "type(address)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 4724,
                                                                        "name": "address",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "3443:7:8",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                },
                                                                "id": 4727,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "3443:13:8",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "id": 4728,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "balance",
                                                            "nodeType": "MemberAccess",
                                                            "src": "3443:21:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "expression": {
                                                                        "id": 4720,
                                                                        "name": "req",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 4597,
                                                                        "src": "3424:3:8",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                            "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                        }
                                                                    },
                                                                    "id": 4721,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "from",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 5045,
                                                                    "src": "3424:8:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_address",
                                                                        "typeString": "address"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_address",
                                                                        "typeString": "address"
                                                                    }
                                                                ],
                                                                "id": 4719,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "3416:8:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_payable_$",
                                                                    "typeString": "type(address payable)"
                                                                },
                                                                "typeName": {
                                                                    "id": 4718,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "3416:8:8",
                                                                    "stateMutability": "payable",
                                                                    "typeDescriptions": {}
                                                                }
                                                            },
                                                            "id": 4722,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "3416:17:8",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        "id": 4723,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "transfer",
                                                        "nodeType": "MemberAccess",
                                                        "src": "3416:26:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                                            "typeString": "function (uint256)"
                                                        }
                                                    },
                                                    "id": 4729,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3416:49:8",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 4730,
                                                "nodeType": "ExpressionStatement",
                                                "src": "3416:49:8"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 4733,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4609,
                                                "src": "3494:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "id": 4734,
                                                "name": "ret",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4611,
                                                "src": "3502:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "id": 4735,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "3493:13:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(bool,bytes memory)"
                                        }
                                    },
                                    "functionReturnParameters": 4612,
                                    "id": 4736,
                                    "nodeType": "Return",
                                    "src": "3486:20:8"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4594,
                            "nodeType": "StructuredDocumentation",
                            "src": "2162:26:8",
                            "text": "@inheritdoc IForwarder"
                        },
                        "functionSelector": "e024dc7f",
                        "id": 4738,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "execute",
                        "nameLocation": "2202:7:8",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4607,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2407:8:8"
                        },
                        "parameters": {
                            "id": 4606,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4597,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nameLocation": "2243:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4738,
                                    "src": "2219:27:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "id": 4596,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4595,
                                            "name": "ForwardRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5058,
                                            "src": "2219:14:8"
                                        },
                                        "referencedDeclaration": 5058,
                                        "src": "2219:14:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4599,
                                    "mutability": "mutable",
                                    "name": "domainSeparator",
                                    "nameLocation": "2264:15:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4738,
                                    "src": "2256:23:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 4598,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2256:7:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4601,
                                    "mutability": "mutable",
                                    "name": "requestTypeHash",
                                    "nameLocation": "2297:15:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4738,
                                    "src": "2289:23:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 4600,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2289:7:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4603,
                                    "mutability": "mutable",
                                    "name": "suffixData",
                                    "nameLocation": "2337:10:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4738,
                                    "src": "2322:25:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4602,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2322:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4605,
                                    "mutability": "mutable",
                                    "name": "sig",
                                    "nameLocation": "2372:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4738,
                                    "src": "2357:18:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4604,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2357:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2209:172:8"
                        },
                        "returnParameters": {
                            "id": 4612,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4609,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nameLocation": "2434:7:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4738,
                                    "src": "2429:12:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 4608,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2429:4:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4611,
                                    "mutability": "mutable",
                                    "name": "ret",
                                    "nameLocation": "2456:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4738,
                                    "src": "2443:16:8",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4610,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2443:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2428:32:8"
                        },
                        "scope": 5036,
                        "src": "2193:1320:8",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 4755,
                            "nodeType": "Block",
                            "src": "3584:78:8",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4751,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "baseExpression": {
                                                        "id": 4745,
                                                        "name": "nonces",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4502,
                                                        "src": "3602:6:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 4748,
                                                    "indexExpression": {
                                                        "expression": {
                                                            "id": 4746,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4741,
                                                            "src": "3609:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 4747,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "from",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5045,
                                                        "src": "3609:8:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "3602:16:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 4749,
                                                        "name": "req",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4741,
                                                        "src": "3622:3:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                            "typeString": "struct IForwarder.ForwardRequest calldata"
                                                        }
                                                    },
                                                    "id": 4750,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "nonce",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5053,
                                                    "src": "3622:9:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "3602:29:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4657443a206e6f6e6365206d69736d61746368",
                                                "id": 4752,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3633:21:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_a6c513f883265bc3929a475166103a6e13fbf0ec93c23813d2faa03ddaf1aaa1",
                                                    "typeString": "literal_string \"FWD: nonce mismatch\""
                                                },
                                                "value": "FWD: nonce mismatch"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_a6c513f883265bc3929a475166103a6e13fbf0ec93c23813d2faa03ddaf1aaa1",
                                                    "typeString": "literal_string \"FWD: nonce mismatch\""
                                                }
                                            ],
                                            "id": 4744,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "3594:7:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4753,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3594:61:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4754,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3594:61:8"
                                }
                            ]
                        },
                        "id": 4756,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifyNonce",
                        "nameLocation": "3528:12:8",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4742,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4741,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nameLocation": "3565:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4756,
                                    "src": "3541:27:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "id": 4740,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4739,
                                            "name": "ForwardRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5058,
                                            "src": "3541:14:8"
                                        },
                                        "referencedDeclaration": 5058,
                                        "src": "3541:14:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3540:29:8"
                        },
                        "returnParameters": {
                            "id": 4743,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3584:0:8"
                        },
                        "scope": 5036,
                        "src": "3519:143:8",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 4774,
                            "nodeType": "Block",
                            "src": "3737:80:8",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4770,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 4767,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "UnaryOperation",
                                                    "operator": "++",
                                                    "prefix": false,
                                                    "src": "3755:18:8",
                                                    "subExpression": {
                                                        "baseExpression": {
                                                            "id": 4763,
                                                            "name": "nonces",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4502,
                                                            "src": "3755:6:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                "typeString": "mapping(address => uint256)"
                                                            }
                                                        },
                                                        "id": 4766,
                                                        "indexExpression": {
                                                            "expression": {
                                                                "id": 4764,
                                                                "name": "req",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4759,
                                                                "src": "3762:3:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                    "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                }
                                                            },
                                                            "id": 4765,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "from",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 5045,
                                                            "src": "3762:8:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": true,
                                                        "nodeType": "IndexAccess",
                                                        "src": "3755:16:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 4768,
                                                        "name": "req",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4759,
                                                        "src": "3777:3:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                            "typeString": "struct IForwarder.ForwardRequest calldata"
                                                        }
                                                    },
                                                    "id": 4769,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "nonce",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5053,
                                                    "src": "3777:9:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "3755:31:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4657443a206e6f6e6365206d69736d61746368",
                                                "id": 4771,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3788:21:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_a6c513f883265bc3929a475166103a6e13fbf0ec93c23813d2faa03ddaf1aaa1",
                                                    "typeString": "literal_string \"FWD: nonce mismatch\""
                                                },
                                                "value": "FWD: nonce mismatch"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_a6c513f883265bc3929a475166103a6e13fbf0ec93c23813d2faa03ddaf1aaa1",
                                                    "typeString": "literal_string \"FWD: nonce mismatch\""
                                                }
                                            ],
                                            "id": 4762,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "3747:7:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4772,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3747:63:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4773,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3747:63:8"
                                }
                            ]
                        },
                        "id": 4775,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifyAndUpdateNonce",
                        "nameLocation": "3677:21:8",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4760,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4759,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nameLocation": "3723:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4775,
                                    "src": "3699:27:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "id": 4758,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4757,
                                            "name": "ForwardRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5058,
                                            "src": "3699:14:8"
                                        },
                                        "referencedDeclaration": 5058,
                                        "src": "3699:14:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3698:29:8"
                        },
                        "returnParameters": {
                            "id": 4761,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3737:0:8"
                        },
                        "scope": 5036,
                        "src": "3668:149:8",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            5120
                        ],
                        "body": {
                            "id": 4838,
                            "nodeType": "Block",
                            "src": "3955:353:8",
                            "statements": [
                                {
                                    "body": {
                                        "id": 4818,
                                        "nodeType": "Block",
                                        "src": "4019:122:8",
                                        "statements": [
                                            {
                                                "assignments": [
                                                    4799
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 4799,
                                                        "mutability": "mutable",
                                                        "name": "c",
                                                        "nameLocation": "4040:1:8",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 4818,
                                                        "src": "4033:8:8",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes1",
                                                            "typeString": "bytes1"
                                                        },
                                                        "typeName": {
                                                            "id": 4798,
                                                            "name": "bytes1",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "4033:6:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes1",
                                                                "typeString": "bytes1"
                                                            }
                                                        },
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 4806,
                                                "initialValue": {
                                                    "baseExpression": {
                                                        "arguments": [
                                                            {
                                                                "id": 4802,
                                                                "name": "typeName",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4778,
                                                                "src": "4050:8:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            ],
                                                            "id": 4801,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "4044:5:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                                "id": 4800,
                                                                "name": "bytes",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "4044:5:8",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 4803,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4044:15:8",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    },
                                                    "id": 4805,
                                                    "indexExpression": {
                                                        "id": 4804,
                                                        "name": "i",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4785,
                                                        "src": "4060:1:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "4044:18:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes1",
                                                        "typeString": "bytes1"
                                                    }
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "4033:29:8"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            "id": 4814,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "commonType": {
                                                                    "typeIdentifier": "t_bytes1",
                                                                    "typeString": "bytes1"
                                                                },
                                                                "id": 4810,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "id": 4808,
                                                                    "name": "c",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4799,
                                                                    "src": "4084:1:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes1",
                                                                        "typeString": "bytes1"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "!=",
                                                                "rightExpression": {
                                                                    "hexValue": "28",
                                                                    "id": 4809,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "string",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "4089:3:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_stringliteral_484bf06f3118ce360605f902ef526c45207bc469c2b056352f14b8408f9f6f9a",
                                                                        "typeString": "literal_string \"(\""
                                                                    },
                                                                    "value": "("
                                                                },
                                                                "src": "4084:8:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "&&",
                                                            "rightExpression": {
                                                                "commonType": {
                                                                    "typeIdentifier": "t_bytes1",
                                                                    "typeString": "bytes1"
                                                                },
                                                                "id": 4813,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "id": 4811,
                                                                    "name": "c",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4799,
                                                                    "src": "4096:1:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes1",
                                                                        "typeString": "bytes1"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "!=",
                                                                "rightExpression": {
                                                                    "hexValue": "29",
                                                                    "id": 4812,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "string",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "4101:3:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_stringliteral_59d76dc3b33357eda30db1508968fbb18f21b9cd2442f1559b20154ddaa4d7ed",
                                                                        "typeString": "literal_string \")\""
                                                                    },
                                                                    "value": ")"
                                                                },
                                                                "src": "4096:8:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "src": "4084:20:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "4657443a20696e76616c696420747970656e616d65",
                                                            "id": 4815,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "4106:23:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_e889225bc6a63582ffd8243051026e25d8ef07d76640e99b95269c2397ffbcba",
                                                                "typeString": "literal_string \"FWD: invalid typename\""
                                                            },
                                                            "value": "FWD: invalid typename"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_e889225bc6a63582ffd8243051026e25d8ef07d76640e99b95269c2397ffbcba",
                                                                "typeString": "literal_string \"FWD: invalid typename\""
                                                            }
                                                        ],
                                                        "id": 4807,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "4076:7:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 4816,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "4076:54:8",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 4817,
                                                "nodeType": "ExpressionStatement",
                                                "src": "4076:54:8"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 4794,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 4788,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4785,
                                            "src": "3986:1:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "expression": {
                                                "arguments": [
                                                    {
                                                        "id": 4791,
                                                        "name": "typeName",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4778,
                                                        "src": "3996:8:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    ],
                                                    "id": 4790,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "3990:5:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                        "typeString": "type(bytes storage pointer)"
                                                    },
                                                    "typeName": {
                                                        "id": 4789,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "3990:5:8",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 4792,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3990:15:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            "id": 4793,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "3990:22:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3986:26:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 4819,
                                    "initializationExpression": {
                                        "assignments": [
                                            4785
                                        ],
                                        "declarations": [
                                            {
                                                "constant": false,
                                                "id": 4785,
                                                "mutability": "mutable",
                                                "name": "i",
                                                "nameLocation": "3979:1:8",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 4819,
                                                "src": "3971:9:8",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 4784,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "3971:7:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "id": 4787,
                                        "initialValue": {
                                            "hexValue": "30",
                                            "id": 4786,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "3983:1:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "3971:13:8"
                                    },
                                    "loopExpression": {
                                        "expression": {
                                            "id": 4796,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "++",
                                            "prefix": false,
                                            "src": "4014:3:8",
                                            "subExpression": {
                                                "id": 4795,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4785,
                                                "src": "4014:1:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 4797,
                                        "nodeType": "ExpressionStatement",
                                        "src": "4014:3:8"
                                    },
                                    "nodeType": "ForStatement",
                                    "src": "3966:175:8"
                                },
                                {
                                    "assignments": [
                                        4821
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4821,
                                            "mutability": "mutable",
                                            "name": "requestType",
                                            "nameLocation": "4165:11:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4838,
                                            "src": "4151:25:8",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string"
                                            },
                                            "typeName": {
                                                "id": 4820,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4151:6:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_storage_ptr",
                                                    "typeString": "string"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4833,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 4826,
                                                        "name": "typeName",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4778,
                                                        "src": "4203:8:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    },
                                                    {
                                                        "hexValue": "28",
                                                        "id": 4827,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "4213:3:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_484bf06f3118ce360605f902ef526c45207bc469c2b056352f14b8408f9f6f9a",
                                                            "typeString": "literal_string \"(\""
                                                        },
                                                        "value": "("
                                                    },
                                                    {
                                                        "id": 4828,
                                                        "name": "GENERIC_PARAMS",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4487,
                                                        "src": "4218:14:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    },
                                                    {
                                                        "hexValue": "2c",
                                                        "id": 4829,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "4234:3:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_3e7a35b97029f9e0cf6effd71c1a7958822e9a217d3a3aec886668a7dd8231cb",
                                                            "typeString": "literal_string \",\""
                                                        },
                                                        "value": ","
                                                    },
                                                    {
                                                        "id": 4830,
                                                        "name": "typeSuffix",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4780,
                                                        "src": "4239:10:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_stringliteral_484bf06f3118ce360605f902ef526c45207bc469c2b056352f14b8408f9f6f9a",
                                                            "typeString": "literal_string \"(\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_stringliteral_3e7a35b97029f9e0cf6effd71c1a7958822e9a217d3a3aec886668a7dd8231cb",
                                                            "typeString": "literal_string \",\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 4824,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "4186:3:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 4825,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "src": "4186:16:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 4831,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4186:64:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 4823,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "4179:6:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                                "typeString": "type(string storage pointer)"
                                            },
                                            "typeName": {
                                                "id": 4822,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4179:6:8",
                                                "typeDescriptions": {}
                                            }
                                        },
                                        "id": 4832,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4179:72:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4151:100:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4835,
                                                "name": "requestType",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4821,
                                                "src": "4289:11:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 4834,
                                            "name": "registerRequestTypeInternal",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4925,
                                            "src": "4261:27:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory)"
                                            }
                                        },
                                        "id": 4836,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4261:40:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4837,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4261:40:8"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4776,
                            "nodeType": "StructuredDocumentation",
                            "src": "3823:26:8",
                            "text": "@inheritdoc IForwarder"
                        },
                        "functionSelector": "d9210be5",
                        "id": 4839,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "registerRequestType",
                        "nameLocation": "3863:19:8",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4782,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3946:8:8"
                        },
                        "parameters": {
                            "id": 4781,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4778,
                                    "mutability": "mutable",
                                    "name": "typeName",
                                    "nameLocation": "3899:8:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4839,
                                    "src": "3883:24:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 4777,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3883:6:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4780,
                                    "mutability": "mutable",
                                    "name": "typeSuffix",
                                    "nameLocation": "3925:10:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4839,
                                    "src": "3909:26:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 4779,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3909:6:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3882:54:8"
                        },
                        "returnParameters": {
                            "id": 4783,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3955:0:8"
                        },
                        "scope": 5036,
                        "src": "3854:454:8",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5128
                        ],
                        "body": {
                            "id": 4898,
                            "nodeType": "Block",
                            "src": "4443:502:8",
                            "statements": [
                                {
                                    "assignments": [
                                        4849
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4849,
                                            "mutability": "mutable",
                                            "name": "chainId",
                                            "nameLocation": "4461:7:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4898,
                                            "src": "4453:15:8",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 4848,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4453:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4850,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4453:15:8"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "4546:24:8",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "4548:20:8",
                                                "value": {
                                                    "arguments": [],
                                                    "functionName": {
                                                        "name": "chainid",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4559:7:8"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "4559:9:8"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "chainId",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4548:7:8"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "evmVersion": "london",
                                    "externalReferences": [
                                        {
                                            "declaration": 4849,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "4548:7:8",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 4851,
                                    "nodeType": "InlineAssembly",
                                    "src": "4537:33:8"
                                },
                                {
                                    "assignments": [
                                        4853
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4853,
                                            "mutability": "mutable",
                                            "name": "domainValue",
                                            "nameLocation": "4593:11:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4898,
                                            "src": "4580:24:8",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 4852,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4580:5:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4880,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "id": 4859,
                                                                "name": "EIP712_DOMAIN_TYPE",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4490,
                                                                "src": "4647:18:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_string_memory_ptr",
                                                                    "typeString": "string memory"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_string_memory_ptr",
                                                                    "typeString": "string memory"
                                                                }
                                                            ],
                                                            "id": 4858,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "4641:5:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                                "id": 4857,
                                                                "name": "bytes",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "4641:5:8",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 4860,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4641:25:8",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "id": 4856,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967288,
                                                    "src": "4631:9:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 4861,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4631:36:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "id": 4865,
                                                                "name": "name",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4842,
                                                                "src": "4697:4:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            ],
                                                            "id": 4864,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "4691:5:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                                "id": 4863,
                                                                "name": "bytes",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "4691:5:8",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 4866,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4691:11:8",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    ],
                                                    "id": 4862,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967288,
                                                    "src": "4681:9:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 4867,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4681:22:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "id": 4871,
                                                                "name": "version",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4844,
                                                                "src": "4733:7:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            ],
                                                            "id": 4870,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "4727:5:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                                "id": 4869,
                                                                "name": "bytes",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "4727:5:8",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 4872,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4727:14:8",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    ],
                                                    "id": 4868,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967288,
                                                    "src": "4717:9:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 4873,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4717:25:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 4874,
                                                "name": "chainId",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4849,
                                                "src": "4756:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 4877,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967268,
                                                        "src": "4785:4:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_Forwarder_$5036",
                                                            "typeString": "contract Forwarder"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_Forwarder_$5036",
                                                            "typeString": "contract Forwarder"
                                                        }
                                                    ],
                                                    "id": 4876,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "4777:7:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 4875,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "4777:7:8",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 4878,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4777:13:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 4854,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967295,
                                                "src": "4607:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 4855,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encode",
                                            "nodeType": "MemberAccess",
                                            "src": "4607:10:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 4879,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4607:184:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4580:211:8"
                                },
                                {
                                    "assignments": [
                                        4882
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4882,
                                            "mutability": "mutable",
                                            "name": "domainHash",
                                            "nameLocation": "4810:10:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4898,
                                            "src": "4802:18:8",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            },
                                            "typeName": {
                                                "id": 4881,
                                                "name": "bytes32",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4802:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4886,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 4884,
                                                "name": "domainValue",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4853,
                                                "src": "4833:11:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 4883,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967288,
                                            "src": "4823:9:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 4885,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4823:22:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4802:43:8"
                                },
                                {
                                    "expression": {
                                        "id": 4891,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 4887,
                                                "name": "domains",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4498,
                                                "src": "4856:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                                    "typeString": "mapping(bytes32 => bool)"
                                                }
                                            },
                                            "id": 4889,
                                            "indexExpression": {
                                                "id": 4888,
                                                "name": "domainHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4882,
                                                "src": "4864:10:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "4856:19:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "74727565",
                                            "id": 4890,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "bool",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "4878:4:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "value": "true"
                                        },
                                        "src": "4856:26:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 4892,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4856:26:8"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 4894,
                                                "name": "domainHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4882,
                                                "src": "4914:10:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 4895,
                                                "name": "domainValue",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4853,
                                                "src": "4926:11:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 4893,
                                            "name": "DomainRegistered",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5064,
                                            "src": "4897:16:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes32,bytes memory)"
                                            }
                                        },
                                        "id": 4896,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4897:41:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4897,
                                    "nodeType": "EmitStatement",
                                    "src": "4892:46:8"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4840,
                            "nodeType": "StructuredDocumentation",
                            "src": "4314:26:8",
                            "text": "@inheritdoc IForwarder"
                        },
                        "functionSelector": "9c7b4592",
                        "id": 4899,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "registerDomainSeparator",
                        "nameLocation": "4354:23:8",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4846,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4434:8:8"
                        },
                        "parameters": {
                            "id": 4845,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4842,
                                    "mutability": "mutable",
                                    "name": "name",
                                    "nameLocation": "4394:4:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4899,
                                    "src": "4378:20:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 4841,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4378:6:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4844,
                                    "mutability": "mutable",
                                    "name": "version",
                                    "nameLocation": "4416:7:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4899,
                                    "src": "4400:23:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 4843,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4400:6:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4377:47:8"
                        },
                        "returnParameters": {
                            "id": 4847,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4443:0:8"
                        },
                        "scope": 5036,
                        "src": "4345:600:8",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 4924,
                            "nodeType": "Block",
                            "src": "5024:183:8",
                            "statements": [
                                {
                                    "assignments": [
                                        4905
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4905,
                                            "mutability": "mutable",
                                            "name": "requestTypehash",
                                            "nameLocation": "5043:15:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4924,
                                            "src": "5035:23:8",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            },
                                            "typeName": {
                                                "id": 4904,
                                                "name": "bytes32",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5035:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4912,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 4909,
                                                        "name": "requestType",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4901,
                                                        "src": "5077:11:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    ],
                                                    "id": 4908,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "5071:5:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                        "typeString": "type(bytes storage pointer)"
                                                    },
                                                    "typeName": {
                                                        "id": 4907,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "5071:5:8",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 4910,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "5071:18:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 4906,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967288,
                                            "src": "5061:9:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 4911,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5061:29:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5035:55:8"
                                },
                                {
                                    "expression": {
                                        "id": 4917,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 4913,
                                                "name": "typeHashes",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4494,
                                                "src": "5100:10:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                                    "typeString": "mapping(bytes32 => bool)"
                                                }
                                            },
                                            "id": 4915,
                                            "indexExpression": {
                                                "id": 4914,
                                                "name": "requestTypehash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4905,
                                                "src": "5111:15:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "5100:27:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "74727565",
                                            "id": 4916,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "bool",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "5130:4:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "value": "true"
                                        },
                                        "src": "5100:34:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 4918,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5100:34:8"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 4920,
                                                "name": "requestTypehash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4905,
                                                "src": "5171:15:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 4921,
                                                "name": "requestType",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4901,
                                                "src": "5188:11:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 4919,
                                            "name": "RequestTypeRegistered",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5070,
                                            "src": "5149:21:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes32,string memory)"
                                            }
                                        },
                                        "id": 4922,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5149:51:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4923,
                                    "nodeType": "EmitStatement",
                                    "src": "5144:56:8"
                                }
                            ]
                        },
                        "id": 4925,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "registerRequestTypeInternal",
                        "nameLocation": "4960:27:8",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4902,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4901,
                                    "mutability": "mutable",
                                    "name": "requestType",
                                    "nameLocation": "5002:11:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4925,
                                    "src": "4988:25:8",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 4900,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4988:6:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4987:27:8"
                        },
                        "returnParameters": {
                            "id": 4903,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5024:0:8"
                        },
                        "scope": 5036,
                        "src": "4951:256:8",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 4986,
                            "nodeType": "Block",
                            "src": "5438:508:8",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "baseExpression": {
                                                    "id": 4940,
                                                    "name": "domains",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4498,
                                                    "src": "5456:7:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                                        "typeString": "mapping(bytes32 => bool)"
                                                    }
                                                },
                                                "id": 4942,
                                                "indexExpression": {
                                                    "id": 4941,
                                                    "name": "domainSeparator",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4930,
                                                    "src": "5464:15:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "5456:24:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4657443a20756e7265676973746572656420646f6d61696e207365702e",
                                                "id": 4943,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5482:31:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_ca4cbe853eb8d1d70a796ee3c3ab90e44cfde7370b3c6b6e831ba82e4c462422",
                                                    "typeString": "literal_string \"FWD: unregistered domain sep.\""
                                                },
                                                "value": "FWD: unregistered domain sep."
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_ca4cbe853eb8d1d70a796ee3c3ab90e44cfde7370b3c6b6e831ba82e4c462422",
                                                    "typeString": "literal_string \"FWD: unregistered domain sep.\""
                                                }
                                            ],
                                            "id": 4939,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5448:7:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4944,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5448:66:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4945,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5448:66:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "baseExpression": {
                                                    "id": 4947,
                                                    "name": "typeHashes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4494,
                                                    "src": "5532:10:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                                        "typeString": "mapping(bytes32 => bool)"
                                                    }
                                                },
                                                "id": 4949,
                                                "indexExpression": {
                                                    "id": 4948,
                                                    "name": "requestTypeHash",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4932,
                                                    "src": "5543:15:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "5532:27:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4657443a20756e72656769737465726564207479706568617368",
                                                "id": 4950,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5561:28:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_f721acda6e6b2b13f902afdb9b85b2b8143482ec73725549e81f9793051e7c26",
                                                    "typeString": "literal_string \"FWD: unregistered typehash\""
                                                },
                                                "value": "FWD: unregistered typehash"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_f721acda6e6b2b13f902afdb9b85b2b8143482ec73725549e81f9793051e7c26",
                                                    "typeString": "literal_string \"FWD: unregistered typehash\""
                                                }
                                            ],
                                            "id": 4946,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5524:7:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4951,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5524:66:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4952,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5524:66:8"
                                },
                                {
                                    "assignments": [
                                        4954
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4954,
                                            "mutability": "mutable",
                                            "name": "digest",
                                            "nameLocation": "5608:6:8",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4986,
                                            "src": "5600:14:8",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            },
                                            "typeName": {
                                                "id": 4953,
                                                "name": "bytes32",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5600:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4969,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "hexValue": "1901",
                                                        "id": 4958,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "5661:10:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                                                            "typeString": "literal_string hex\"1901\""
                                                        },
                                                        "value": "\u0019\u0001"
                                                    },
                                                    {
                                                        "id": 4959,
                                                        "name": "domainSeparator",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4930,
                                                        "src": "5673:15:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    },
                                                    {
                                                        "arguments": [
                                                            {
                                                                "arguments": [
                                                                    {
                                                                        "id": 4962,
                                                                        "name": "req",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 4928,
                                                                        "src": "5728:3:8",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                            "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                        }
                                                                    },
                                                                    {
                                                                        "id": 4963,
                                                                        "name": "requestTypeHash",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 4932,
                                                                        "src": "5733:15:8",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_bytes32",
                                                                            "typeString": "bytes32"
                                                                        }
                                                                    },
                                                                    {
                                                                        "id": 4964,
                                                                        "name": "suffixData",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 4934,
                                                                        "src": "5750:10:8",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                                            "typeString": "bytes calldata"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                            "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                        },
                                                                        {
                                                                            "typeIdentifier": "t_bytes32",
                                                                            "typeString": "bytes32"
                                                                        },
                                                                        {
                                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                                            "typeString": "bytes calldata"
                                                                        }
                                                                    ],
                                                                    "id": 4961,
                                                                    "name": "_getEncoded",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 5035,
                                                                    "src": "5716:11:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_internal_pure$_t_struct$_ForwardRequest_$5058_calldata_ptr_$_t_bytes32_$_t_bytes_calldata_ptr_$returns$_t_bytes_memory_ptr_$",
                                                                        "typeString": "function (struct IForwarder.ForwardRequest calldata,bytes32,bytes calldata) pure returns (bytes memory)"
                                                                    }
                                                                },
                                                                "id": 4965,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "5716:45:8",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            ],
                                                            "id": 4960,
                                                            "name": "keccak256",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967288,
                                                            "src": "5706:9:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                                            }
                                                        },
                                                        "id": 4966,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "5706:56:8",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                                                            "typeString": "literal_string hex\"1901\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 4956,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "5627:3:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 4957,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "src": "5627:16:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 4967,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "5627:149:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 4955,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967288,
                                            "src": "5617:9:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 4968,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5617:160:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5600:177:8"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 4982,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    },
                                                    "id": 4974,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "id": 4971,
                                                            "name": "tx",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967270,
                                                            "src": "5848:2:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_transaction",
                                                                "typeString": "tx"
                                                            }
                                                        },
                                                        "id": 4972,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "origin",
                                                        "nodeType": "MemberAccess",
                                                        "src": "5848:9:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "==",
                                                    "rightExpression": {
                                                        "id": 4973,
                                                        "name": "DRY_RUN_ADDRESS",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4484,
                                                        "src": "5861:15:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "src": "5848:28:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "||",
                                                "rightExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    },
                                                    "id": 4981,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "arguments": [
                                                            {
                                                                "id": 4977,
                                                                "name": "sig",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4936,
                                                                "src": "5895:3:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                                    "typeString": "bytes calldata"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                                    "typeString": "bytes calldata"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "id": 4975,
                                                                "name": "digest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4954,
                                                                "src": "5880:6:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes32",
                                                                    "typeString": "bytes32"
                                                                }
                                                            },
                                                            "id": 4976,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "recover",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 11871,
                                                            "src": "5880:14:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                                                                "typeString": "function (bytes32,bytes memory) pure returns (address)"
                                                            }
                                                        },
                                                        "id": 4978,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "5880:19:8",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "==",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 4979,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4928,
                                                            "src": "5903:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 4980,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "from",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5045,
                                                        "src": "5903:8:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "src": "5880:31:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "5848:63:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4657443a207369676e6174757265206d69736d61746368",
                                                "id": 4983,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5913:25:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_a309cac733f4697166c19648d49cb610f9d6044ca84e2283a12d8c0e1af506c4",
                                                    "typeString": "literal_string \"FWD: signature mismatch\""
                                                },
                                                "value": "FWD: signature mismatch"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_a309cac733f4697166c19648d49cb610f9d6044ca84e2283a12d8c0e1af506c4",
                                                    "typeString": "literal_string \"FWD: signature mismatch\""
                                                }
                                            ],
                                            "id": 4970,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5840:7:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4984,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5840:99:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4985,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5840:99:8"
                                }
                            ]
                        },
                        "id": 4987,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifySig",
                        "nameLocation": "5222:10:8",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4937,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4928,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nameLocation": "5266:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4987,
                                    "src": "5242:27:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "id": 4927,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4926,
                                            "name": "ForwardRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5058,
                                            "src": "5242:14:8"
                                        },
                                        "referencedDeclaration": 5058,
                                        "src": "5242:14:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4930,
                                    "mutability": "mutable",
                                    "name": "domainSeparator",
                                    "nameLocation": "5287:15:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4987,
                                    "src": "5279:23:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 4929,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5279:7:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4932,
                                    "mutability": "mutable",
                                    "name": "requestTypeHash",
                                    "nameLocation": "5320:15:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4987,
                                    "src": "5312:23:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 4931,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5312:7:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4934,
                                    "mutability": "mutable",
                                    "name": "suffixData",
                                    "nameLocation": "5360:10:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4987,
                                    "src": "5345:25:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4933,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5345:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4936,
                                    "mutability": "mutable",
                                    "name": "sig",
                                    "nameLocation": "5395:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4987,
                                    "src": "5380:18:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4935,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5380:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5232:167:8"
                        },
                        "returnParameters": {
                            "id": 4938,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5438:0:8"
                        },
                        "scope": 5036,
                        "src": "5213:733:8",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 5034,
                            "nodeType": "Block",
                            "src": "6281:536:8",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 5002,
                                                "name": "requestTypeHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4993,
                                                "src": "6551:15:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "expression": {
                                                                    "id": 5007,
                                                                    "name": "req",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4991,
                                                                    "src": "6596:3:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                    }
                                                                },
                                                                "id": 5008,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "from",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 5045,
                                                                "src": "6596:8:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            ],
                                                            "id": 5006,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "6588:7:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_uint160_$",
                                                                "typeString": "type(uint160)"
                                                            },
                                                            "typeName": {
                                                                "id": 5005,
                                                                "name": "uint160",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "6588:7:8",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 5009,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "6588:17:8",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint160",
                                                            "typeString": "uint160"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint160",
                                                            "typeString": "uint160"
                                                        }
                                                    ],
                                                    "id": 5004,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "6580:7:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_uint256_$",
                                                        "typeString": "type(uint256)"
                                                    },
                                                    "typeName": {
                                                        "id": 5003,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "6580:7:8",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 5010,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6580:26:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "expression": {
                                                                    "id": 5015,
                                                                    "name": "req",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4991,
                                                                    "src": "6636:3:8",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                    }
                                                                },
                                                                "id": 5016,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "to",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 5047,
                                                                "src": "6636:6:8",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            ],
                                                            "id": 5014,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "6628:7:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_uint160_$",
                                                                "typeString": "type(uint160)"
                                                            },
                                                            "typeName": {
                                                                "id": 5013,
                                                                "name": "uint160",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "6628:7:8",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 5017,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "6628:15:8",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint160",
                                                            "typeString": "uint160"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint160",
                                                            "typeString": "uint160"
                                                        }
                                                    ],
                                                    "id": 5012,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "6620:7:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_uint256_$",
                                                        "typeString": "type(uint256)"
                                                    },
                                                    "typeName": {
                                                        "id": 5011,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "6620:7:8",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 5018,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6620:24:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 5019,
                                                    "name": "req",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4991,
                                                    "src": "6658:3:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 5020,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "value",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5049,
                                                "src": "6658:9:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 5021,
                                                    "name": "req",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4991,
                                                    "src": "6681:3:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 5022,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "gas",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5051,
                                                "src": "6681:7:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 5023,
                                                    "name": "req",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4991,
                                                    "src": "6702:3:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 5024,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "nonce",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5053,
                                                "src": "6702:9:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "id": 5026,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4991,
                                                            "src": "6735:3:8",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 5027,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "data",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5055,
                                                        "src": "6735:8:8",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    ],
                                                    "id": 5025,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967288,
                                                    "src": "6725:9:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 5028,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6725:19:8",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 5029,
                                                    "name": "req",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4991,
                                                    "src": "6758:3:8",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 5030,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "validUntilTime",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5057,
                                                "src": "6758:18:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "id": 5031,
                                                "name": "suffixData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4995,
                                                "src": "6790:10:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "expression": {
                                                "id": 5000,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967295,
                                                "src": "6521:3:8",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 5001,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encodePacked",
                                            "nodeType": "MemberAccess",
                                            "src": "6521:16:8",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 5032,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6521:289:8",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 4999,
                                    "id": 5033,
                                    "nodeType": "Return",
                                    "src": "6514:296:8"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4988,
                            "nodeType": "StructuredDocumentation",
                            "src": "5952:131:8",
                            "text": " @notice Creates a byte array that is a valid ABI encoding of a request of a `RequestType` type. See `execute()`."
                        },
                        "functionSelector": "e2b62f2d",
                        "id": 5035,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_getEncoded",
                        "nameLocation": "6097:11:8",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4996,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4991,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nameLocation": "6142:3:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5035,
                                    "src": "6118:27:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "id": 4990,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4989,
                                            "name": "ForwardRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5058,
                                            "src": "6118:14:8"
                                        },
                                        "referencedDeclaration": 5058,
                                        "src": "6118:14:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$5058_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4993,
                                    "mutability": "mutable",
                                    "name": "requestTypeHash",
                                    "nameLocation": "6163:15:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5035,
                                    "src": "6155:23:8",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 4992,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6155:7:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4995,
                                    "mutability": "mutable",
                                    "name": "suffixData",
                                    "nameLocation": "6203:10:8",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5035,
                                    "src": "6188:25:8",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4994,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6188:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6108:111:8"
                        },
                        "returnParameters": {
                            "id": 4999,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4998,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5035,
                                    "src": "6262:12:8",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4997,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6262:5:8",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6252:28:8"
                        },
                        "scope": 5036,
                        "src": "6088:729:8",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "public"
                    }
                ],
                "scope": 5037,
                "src": "479:6340:8",
                "usedErrors": []
            }
        ],
        "src": "0:6819:8"
    },
    "compiler": {
        "name": "solc",
        "version": "0.8.7+commit.e28d00a7.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2023-03-16T16:54:15.188Z",
    "devdoc": {
        "kind": "dev",
        "methods": {
            "execute((address,address,uint256,uint256,uint256,bytes,uint256),bytes32,bytes32,bytes,bytes)": {
                "params": {
                    "domainSeparator": "The domain used when signing this request.",
                    "forwardRequest": "All requested transaction parameters.",
                    "requestTypeHash": "The request type used when signing this request.",
                    "signature": "The client signature to be validated.",
                    "suffixData": "The ABI-encoded extension data for the current `RequestType` used when signing this request."
                },
                "returns": {
                    "ret": "The byte array returned by the underlying `CALL` to the target address.",
                    "success": "The success flag of the underlying `CALL` to the target address."
                }
            },
            "getNonce(address)": {
                "params": {
                    "from": "The address of a sender."
                },
                "returns": {
                    "_0": "The nonce for this address."
                }
            },
            "registerDomainSeparator(string,string)": {
                "params": {
                    "name": "The domain's display name.",
                    "version": "The domain/protocol version."
                }
            },
            "registerRequestType(string,string)": {
                "params": {
                    "typeName": "The name of the request type.",
                    "typeSuffix": "Any extra data after the generic params. Must contain add at least one param. The generic ForwardRequest type is always registered by the constructor."
                }
            },
            "supportsInterface(bytes4)": {
                "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas."
            }
        },
        "title": "The Forwarder Implementation",
        "version": 1
    },
    "userdoc": {
        "kind": "user",
        "methods": {
            "_getEncoded((address,address,uint256,uint256,uint256,bytes,uint256),bytes32,bytes)": {
                "notice": "Creates a byte array that is a valid ABI encoding of a request of a `RequestType` type. See `execute()`."
            },
            "execute((address,address,uint256,uint256,uint256,bytes,uint256),bytes32,bytes32,bytes,bytes)": {
                "notice": "Executes a transaction specified by the `ForwardRequest`. The transaction is first verified and then executed. The success flag and returned bytes array of the `CALL` are returned as-is. This method would revert only in case of a verification error. All the target errors are reported using the returned success flag and returned bytes array."
            },
            "registerDomainSeparator(string,string)": {
                "notice": "Register a new domain separator.This is necessary for the Forwarder to be able to verify the signatures conforming to the ERC-712.The domain separator must have the following fields: `name`, `version`, `chainId`, `verifyingContract`. The `chainId` is the current network's `chainId`, and the `verifyingContract` is this Forwarder's address. This method accepts the domain name and version to create and register the domain separator value."
            },
            "registerRequestType(string,string)": {
                "notice": "Register a new Request typehash.This is necessary for the Forwarder to be able to verify the signatures conforming to the ERC-712."
            },
            "verify((address,address,uint256,uint256,uint256,bytes,uint256),bytes32,bytes32,bytes,bytes)": {
                "notice": "Verify the transaction is valid and can be executed. Implementations must validate the signature and the nonce of the request are correct. Does not revert and returns successfully if the input is valid. Reverts if any validation has failed. For instance, if either signature or nonce are incorrect. Reverts if `domainSeparator` or `requestTypeHash` are not registered as well."
            }
        },
        "notice": "This implementation of the `IForwarder` interface uses ERC-712 signatures and stored nonces for verification.",
        "version": 1
    }
}
